只有当不为空时,存储过程的结果才会存入文件

Stored Procedure results into a file only if not null

我正在尝试使用 SQL 作业定期执行存储过程,并将其结果存储到文件夹位置的 .txt 文件中。

我使用的 BCP 命令如下:

DECLARE @command VARCHAR(1000)
SET @command = 'BCP "Exec [DatabaseName].[dbo].[StoredProcedureName] " queryout "D:\In\ErrorDetails'+ '.txt" -c -T -t -k'
EXEC xp_cmdshell @command

只有当 SP 的结果不为空时,我才需要执行此操作。

您可以使用 temp table 存储 SP 生成的数据,如果有任何行 - 将其写入文件

USE tempdb

IF OBJECT_ID(N'#MyTempTable') IS NOT NULL
BEGIN
    DROP TABLE #MyTempTable
END

SELECT * INTO #MyTempTable 
FROM OPENROWSET('SQLNCLI', 'Server=HOME\SQLEXPRESS;Trusted_Connection=yes;',
     'EXEC Test.dbo.StoredProcedureName');

IF (SELECT COUNT(*) FROM #MyTempTable) > 0
BEGIN
    DECLARE @command VARCHAR(1000) 
    SET @command = 'BCP "USE tempdb SELECT * FROM #MyTempTable " queryout "D:\In\ErrorDetails'+ '.txt" -c -T -t -k' 
    EXEC xp_cmdshell @command
END