我有数百个SQL Server表需要导出为带有
是否有更好的方法/工具/脚本可以一次性完成所有操作?
谢谢
"
文本限定符和|
分隔符的txt或csv文件。导入/导出向导仅允许一次导出一个表。是否有更好的方法/工具/脚本可以一次性完成所有操作?
谢谢
"
文本限定符和|
分隔符的txt或csv文件。导入/导出向导仅允许一次导出一个表。SELECT 'bcp [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] out "' + TABLE_SCHEMA + '.' + TABLE_NAME + '.txt" -T -c -t"|" -d {DATABASE NAME} -S {SERVER NAME} -T'
FROM INFORMATION_SCHEMA.TABLES
我看到了您的帖子并查看了SQL管理工具中的导出工具,发现它不能执行您所说的多表导出(在我的情况下是SQL管理工具2016预览版)。我想也许我可以编写一个快速的PowerShell脚本来完成这项工作。
至少对我来说,以下内容可以胜任此项工作:1.提取数据库中所有表的列表,然后2.遍历所有表,并3.从表中进行选择并将其导出为预定义位置的CSV。
我在Windows 10上通过PowerShell ISE执行,使用的是PowerShell版本5。
如果您不确定您的版本,请运行:
$PSVersionTable.PSVersion
只要记得在运行之前更改执行策略,例如https://technet.microsoft.com/en-us/library/ee176961.aspx
在执行此脚本之前,我将我的执行策略设置为无限制。
Set-ExecutionPolicy Unrestricted
这是我写的脚本。
$databaseName="<DATABASE_NAME>"
$instanceName="<HOSTNAME\INSTANCENAME>"
$baseExportPath="C:\temp1\dbexport"
$query = "SELECT name FROM sys.Tables"
$tableNames = Invoke-SqlCmd –ServerInstance $instanceName -Database $databaseName –Query $query
New-Item -Force $baseExportPath -type directory
foreach($dataRow in $tableNames)
{
$exportFileName=$baseExportPath + "\\" + $dataRow.get_Item(0).ToString() + ".csv"
$tableSpecificQuery="select * from " + $dataRow.get_Item(0).ToString()
Invoke-SqlCmd –ServerInstance $instanceName -Database $databaseName –Query $tableSpecificQuery | Export-Csv -Path $exportFileName -NoTypeInformation
}
我没有明确指定导出CSV函数的分隔符,但是可以通过添加轻松完成。
-Delimiter '|'
导入/导出向导创建并运行一个基本的SSIS包。在一个包中使用多个数据流任务来执行其他表格。一个好的起点是从向导中保存该包并将任务复制/粘贴到那里。从那里,更改每个任务中的数据源和目标。
像这样简单的工作,在BIDS或SQL数据工具中工作并不太难。