使用SSMS将数据从SQL Server导出为CSV

5
我需要使用SSMS从SQL Server 2008中的多个表导出数据。我不想使用本地的“导出数据向导”,而是想使用查询。这意味着我不能使用“sqlcmd”或“bcp”。
如何使用查询从SQL Server 2008中导出数据?
我需要它以逗号分隔,并使用双引号作为文本限定符。
非常感谢您的任何指导/帮助。

请注意,您可以在导出数据向导中使用查询。 - swasheck
@swasheck 谢谢,我的意思是我需要自动化查询,并将参数传递到查询中。 - Alex Gordon
可能是从100个表中按年份和月份导出的重复问题。 - George Stocker
5个回答

11

你可以很容易地从SSMS创建CSV输出,但它不会对引用进行处理,因此您可能需要选择像制表符分隔的格式来代替第6步:

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

1
我需要自动化这个过程,因为我需要将参数传递到查询中。 - Alex Gordon

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

可以,但是你需要投入更多的工作来放置文本限定符。 - swasheck
太好了!你能帮我入门吗? - Alex Gordon
这只是一个格式化查询的问题,需要在需要的位置包含 " - swasheck
明白了!我尝试执行cmdshell,但是出现了SQLState = S1000,NativeError = 0的错误。错误信息为[Microsoft][SQL Server Native Client 10.0]无法打开BCP主机数据文件。NULL。 - Alex Gordon
4
@АртёмЦарионов,在这里要求别人登录到您的系统中参加gotomeeting并审核您的代码是不礼貌的。我们需要在这个网站上进行互动,以便人们可以得到解决他们问题的答案。鼓励某人来登录您的系统并不能帮助下一个遇到相同问题的人。如果您的问题是如此独特,那么也许您正在尝试解决错误的问题? - jcolebrand
显示剩余3条评论

3

使用SQL查询无法创建文本文件。SQL只能用于从数据库获取、解析、更新等数据操作,若要将数据写入文件,需要使用系统可执行文件或dll文件。
您需要使用SSIS生成csv文件,而不是使用SSMS导出结果。是否有特定原因要使用SSMS导出结果到csv?

如果使用SSIS,则可以创建一个包来导出信息,然后安排作业定期运行该包。


谢谢 - 我该如何通过这种方式传递参数到查询中? - Alex Gordon
1
如果您采用SSIS方法,一个简单的选择查询就可以完成任务。如果您想学习如何使用SSIS执行此操作,请参见此处 - Saurabh R S

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

干杯!


不行。但是,您可以使用自动化将xls转换为csv。为什么选择CSV而不是XLS? - Tom
xls 不支持我所需的行数。 - Alex Gordon

-1

你可以编写一个带有插入语句的选择查询。

例如: 从SourceTable中选择 'insert into TargetTable values(id, name) values ('''+ id +''','''+ name +''')'


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