我已经知道,在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包可能是一个解决方案,但我想尽可能避免它。
答案 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语句的存储过程。