xp_cmdshell命令在作为作业运行时不执行最后一个命令

时间:2016-08-02 12:22:02

标签: sql-server bcp xp-cmdshell

首先,在每个人都对我大喊大叫之前 - 我在遗留代码中修复错误并且现在重新编写代码 - 我必须尝试使用​​xp_cmdshell命令找到修复程序。

我有一个通过预定作业执行的proc。 proc充满了TSQL,如下所示,将数据转储到日志文件中。

SELECT *    
INTO Temp
FROM MyView

SET @cmd1 = 'bcp "SELECT * FROM [myDatabase].dbo.Temp" queryout "C:\temp.txt" -T -c -t" "'
SET @cmd2= 'type "C:\temp.txt" >> "C:\output.txt"'
EXEC master..xp_cmdshell @cmd1
EXEC master..xp_cmdshell @cmd2

DROP TABLE Temp

问题是proc中的最后一个命令似乎没有运行。我可以在text.txt文件中看到结果,但不能看到output.txt文件。所有前面的工作都很好,但是当我在它上面运行它时,它工作正常。

任何人都可以建议为什么会发生这种情况或提出另一种方法来实现这一目标吗?

由于

1 个答案:

答案 0 :(得分:0)

我认为,BCP作为外部进程运行异步。所以可能的是,在您尝试复制其内容时,您的文件尚未写入。

  • 建议1:包括适当的等待时间
  • 建议2:使用更改的目标文件名第二次调用您的第一个命令
  • 建议3:使用copy而不是type

您可以在其中创建一个仅包含 hello world 的文件c\temp.txt。在type之前尝试将BCP放入一个文件中,然后在BCP之后将其输入另一个文件。