一次性将所有SQL Server表导出为txt或csv文件

3
我有数百个SQL Server表需要导出为带有"文本限定符和|分隔符的txt或csv文件。导入/导出向导仅允许一次导出一个表。
是否有更好的方法/工具/脚本可以一次性完成所有操作?
谢谢

PowerShell 是一个选项吗? - SQLChao
1
你可能想考虑这里提供的解决方案:https://dev59.com/2WfWa4cB1Zd3GeqPj7tf - user2065377
3个回答

3
您可以使用以下方法通过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实用程序的说明以获取更多详细信息。
根据您DB中对象的名称,SELECT可能需要进行更多的调整,但希望这能给您一些开始的想法。

这在尝试反向工程一个奇怪的数据库时非常有效 - 我只是在将应用程序中的特定值更改为ABC123XYZ456后转储了几百个表。当我在生成的文本文件中搜索该值时,要检查的表和列名变得明显起来。这对于反向工程非常有帮助 - 谢谢! - Ian McGowan
很高兴你觉得它有用!在我使用Sybase的日子里,我也曾做过类似于你的事情。顺便说一下,有一些类似的工具可供使用,其中一个我用过的是ApexSQL Search - CaseyR

3

我看到了您的帖子并查看了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 '|'

0

导入/导出向导创建并运行一个基本的SSIS包。在一个包中使用多个数据流任务来执行其他表格。一个好的起点是从向导中保存该包并将任务复制/粘贴到那里。从那里,更改每个任务中的数据源和目标。

像这样简单的工作,在BIDS或SQL数据工具中工作并不太难。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接