Sql BCP—仅当存储过程返回数据时创建文件
当与queryout选项一起使用时,使用bcp命令创建空文件时,我遇到了一个问题Sql BCP—仅当存储过程返回数据时创建文件,sql,sql-server,tsql,stored-procedures,bcp,Sql,Sql Server,Tsql,Stored Procedures,Bcp,当与queryout选项一起使用时,使用bcp命令创建空文件时,我遇到了一个问题 DECLARE @SQLCmd VARCHAR(500); SELECT @SQLCmd = 'bcp ' + '"Exec Migration.usp_GenerateXml"' + ' queryout ' + @FileLocation
DECLARE @SQLCmd VARCHAR(500);
SELECT @SQLCmd = 'bcp '
+ '"Exec Migration.usp_GenerateXml"'
+ ' queryout ' + @FileLocation
+ @FileName
+ ' -c -T -S ' + @ServerName ;
SELECT @SQLCmd AS 'Command to execute';
EXECUTE Migration..xp_cmdshell @SQLCmd;
只有当存储过程返回任何行时,才有办法实际创建文件吗
我不希望两次调用该过程,即第一次调用inspect,第二次调用bcp命令也许您可以将结果写入临时表,然后在写入文件之前检查count(1)>0。使用Powershell也可能更容易。请更新sp以推送输出,然后检查输出是否包含行,然后执行bcp。我已经使用了上述两种建议。我将结果存储在Migration_usp_GenerateXml中的一个临时表中,并使用IF语句将bcp命令移动到此过程中,以检查计数是否大于0。我直接使用临时表中的-out选项执行bcp。然后,我还修改了这个过程,以推送一个输出参数来指示是否创建了一个文件,因为调用过程需要知道是否创建了一个文件