5

我需要使用 SSMS 从 SQL Server 2008 中的多个表中导出数据。我不想使用本机导出数据向导;我想改用查询。这意味着我不能使用sqlcmdor bcp

如何使用查询从 SQL Server 2008 中导出数据?

我需要它以逗号分隔并双引号作为文本限定符。

非常感谢您的任何指导/帮助。

4

5 回答 5

9

您可以轻松地从 SSMS 创建 CSV 输出,但它不会进行引用,因此您可能希望在步骤 6 中选择制表符分隔的格式:

  1. 打开一个新的查询窗口。
  2. 创建您的 SQL 查询。
  3. 在查询窗口中单击鼠标右键。
  4. 选择查询选项...
  5. 选择结果下的文本。
  6. 将输出格式:更改为逗号分隔。
  7. 将每列中显示的最大字符数更改为 8000 或适当的值。
  8. 单击确定。
  9. 在查询窗口中单击鼠标右键。
  10. 选择结果到和结果到文件。
  11. 执行您的查询。
  12. 选择文件名和位置。
  13. 单击保存。
于 2012-06-13T18:24:12.037 回答
5

你可以运行xp_cmdshell运行一个bcp操作:

use [master];

declare @sql nvarchar(4000)
select @sql = 'bcp "select * from sys.columns" queryout c:\file.csv -c -t, -T -S'+ @@servername
exec xp_cmdshell @sql

当然,您必须弄清楚如何格式化您的限定符(可能通过格式文件

编辑:

您的源查询需要类似于以下内容:

SELECT IntValue + '"' + CharValue + '"' FROM TABLE

此外,您可能需要启用此功能

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
GO
于 2012-06-13T18:27:13.533 回答
3

无法使用 SQL 查询创建文本文件。SQL 仅用于从数据库中获取、解析、更新(等)数据。您需要有系统可执行文件/dll 才能写入文件。
您是否有特定原因要使用 SSMS 将生成的结果导出到 csv?为什么不使用 SSIS 生成 csv 的结果?

如果您使用 SSIS 来执行此操作,您将创建一个包来导出信息,然后将包安排在一个作业中,以便在您希望它运行时运行。

于 2012-06-13T18:04:48.070 回答
1

要导出到现有的 excel 文件:

insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=D:\testing.xls;', 
'SELECT * FROM [SheetName$]') select * from SQLServerTable

这是过时的,但我相信它仍然有效。

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=49926

干杯!

于 2012-06-13T18:14:50.173 回答
-1

您可以编写一个带有插入的选择。

例如:select 'insert into TargetTable values(id, name) values ('''+ id +''','''+ name +''')' from SourceTable

于 2012-06-13T18:07:22.847 回答