Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql BCP—仅当存储过程返回数据时创建文件_Sql_Sql Server_Tsql_Stored Procedures_Bcp - Fatal编程技术网

Sql 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

当与queryout选项一起使用时,使用bcp命令创建空文件时,我遇到了一个问题

    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。然后,我还修改了这个过程,以推送一个输出参数来指示是否创建了一个文件,因为调用过程需要知道是否创建了一个文件