我需要使用 SSMS 从 SQL Server 2008 中的多个表中导出数据。我不想使用本机导出数据向导;我想改用查询。这意味着我不能使用sqlcmd
or bcp
。
如何使用查询从 SQL Server 2008 中导出数据?
我需要它以逗号分隔并双引号作为文本限定符。
非常感谢您的任何指导/帮助。
我需要使用 SSMS 从 SQL Server 2008 中的多个表中导出数据。我不想使用本机导出数据向导;我想改用查询。这意味着我不能使用sqlcmd
or bcp
。
如何使用查询从 SQL Server 2008 中导出数据?
我需要它以逗号分隔并双引号作为文本限定符。
非常感谢您的任何指导/帮助。
您可以轻松地从 SSMS 创建 CSV 输出,但它不会进行引用,因此您可能希望在步骤 6 中选择制表符分隔的格式:
你可以运行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
无法使用 SQL 查询创建文本文件。SQL 仅用于从数据库中获取、解析、更新(等)数据。您需要有系统可执行文件/dll 才能写入文件。
您是否有特定原因要使用 SSMS 将生成的结果导出到 csv?为什么不使用 SSIS 生成 csv 的结果?
如果您使用 SSIS 来执行此操作,您将创建一个包来导出信息,然后将包安排在一个作业中,以便在您希望它运行时运行。
要导出到现有的 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
干杯!
您可以编写一个带有插入的选择。
例如:select 'insert into TargetTable values(id, name) values ('''+ id +''','''+ name +''')' from SourceTable