2016-02-26 32 views
2

我有数百个SQL Server表导出到txt或csv,"文本限定符和|分隔。导入/导出向导一次只允许一个表格。一次将所有SQL Server表导出到txt或csv

是否有更好的方法/工具/脚本一次全部?

谢谢

+0

PowerShell中的选项可以轻松完成? – SQLChao

+1

你可能想考虑这里提供的解决方案:http://stackoverflow.com/questions/12140947/using-bcp-utility-to-export-sql-queries-to-a-text-file – user2065377

回答

0

导入/导出向导创建并运行裸机SSIS包。在包中使用多个数据流任务来执行额外的表。一个好的开始将是从向导保存包并在那里复制/粘贴任务。从那里,更改每个任务中的数据源和目标。

在BIDS或SQL数据工具中工作对于像这样简单的东西来说并不算太坏。

https://msdn.microsoft.com/en-us/library/ms141122.aspx

2

你可以使用下面的做BCP东西:

每个在你运行它,对数据库中的表的
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 

这将输出BCP语句。然后,您可以将它们复制并粘贴到命令窗口中。

在上面,你想用你的环境的细节替换{DATABASE NAME}和{SERVER NAME}。 “-T”使用可信的连接(即你),所以如果你需要使用特定的用户名和密码进行操作,你需要做相应的调整。看看BCP util报告了解更多详情。

SELECT可能需要根据数据库中对象的名称进行更多的调整,但希望这可以让您对启动的方式/方式有所了解。

+0

这个工程很好,当试图反向设计一个奇怪的数据库 - 在将应用程序中的特定值更改为ABC123XYZ456后,我只丢弃了几百个表格。当我在生成的文本文件中对该值进行grep时,要检查的表和列名变得很明显。这对逆向工程非常有用 - 谢谢! –

+0

我很高兴你发现它很有用!我在Sybase的日子里做过类似于你的事情。 FWIW,有几个实用程序可以做类似的事情,我使用的是[ApexSQL Search](https://www.apexsql.com/sql_tools_search.aspx) – CaseyR

1

我看到了你的文章,也看到了SQL管理工作室中的导出工具,注意到它没有做你正在谈论的多表导出(在我的情况下,SQL管理工作室2016预览)。我想也许我会写一个快速的PowerShell脚本来完成这项工作。

这对我来说至少是这样,1.提取数据库中所有表的列表,然后2.循环遍历所有表,3.从表中选择并导出到预定义位置的csv。

$PSVersionTable.PSVersion 

只记得例如在运行之前更改执行策略:

我通过PowerShell的ISE在Windows 10,PowerShell的版本5

如果你不确定你的版本上运行的执行 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 '|'