将T-SQL查询结果发送到文件的正确方法

时间:2014-05-14 08:24:51

标签: sql-server bcp

我已经知道,在T-SQL存储过程中,如何通过使用bcp调用的xp_cmdshell命令创建文件。基本示例:

DECLARE @cmd varchar(4000)
SET @cmd='bcp "SELECT * FROM myTable FOR XML RAW" queryout D:\myFile.xml -c -T'
EXEC xp_cmdshell @cmd

现在我的问题是:在我的情况下,查询很长,有很多嵌套查询。是的,它适合varchar,但在引号中将其写为字符串使得它无法管理。并且查询的结果是数千行,因此它不适合varchar。

有没有办法可以在普通的T-SQL中编写查询,然后将结果发送到我的bcp命令,而不必将查询及其结果都放在varchar中?

我知道SSIS包可能是一个解决方案,但我想尽可能避免它。

2 个答案:

答案 0 :(得分:2)

您是否考虑过(抱歉无法解决问题)使用存储过程中的相同查询将输出写入临时表,然后使用bcp在删除之前复制该临时表的输出?

我已经多次这样做,并且像魅力一样。但可能不适用于此。

答案 1 :(得分:1)

解决方案很简单:正如Pepto所建议的那样,bcp可以执行存储过程而不是SELECT。

所以:

DECLARE @cmd varchar(200)
SET @cmd='bcp "execute MyDb.dbo.MySP" queryout D:\myFile.xml -c -T'
EXEC xp_cmdshell @cmd

其中MySP是包含我巨大的SELECT语句的存储过程。