将所有SQL Server表一次导出到txt或csv

时间:2016-02-26 19:58:04

标签: sql-server export

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

这一切都有更好的方法/工具/脚本吗?

由于

3 个答案:

答案 0 :(得分: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可能需要根据数据库中对象的名称进行更多调整,但希望这可以让您了解在何处/如何开始。

答案 1 :(得分:1)

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

这至少为我完成了这项工作,1。提取数据库中所有表的列表,然后2.循环遍历所有表,3。从表中选择并导出到预定义位置的csv。 / p>

我在Windows 10,PowerShell版本5上通过PowerShell ISE执行。

如果您不确定您的版本是否运行:

$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
}

我没有为export-csv函数明确指定分隔符,但可以通过添加

轻松完成
-Delimiter '|'

答案 2 :(得分:0)

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

在BIDS或SQL数据工具中工作对于像这样简单的事情来说并不算太糟糕。

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