2016-08-02 14 views
0

まず、誰もが私に叫ぶ前に - 私はレガシーコードでバグを修正していますが、今は書き直しています - 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ファイルには表示されません。前のすべての作業はうまくいきますが、これを自分自身で実行するとうまく動作します。

誰にこのようなことが起こるのか、なぜこれを達成するための代替方法が示唆されますか?

ありがとう

答えて

0

私は外部プロセスとしてのBCPが非同期で実行されると思います。したがって、あなたのファイルをコピーしようとしている瞬間にあなたのファイルがまだ書かれていない可能性があります。

  • 提案1:
  • 適切な待ち時間を含める提案2:変更されたターゲット・ファイル名を指定して、あなたの最初のコマンド二回目の呼び出し
  • 提言3:使用copyではなくtype

ますファイルc\temp.txtを作成して、hello worldとします。 typeBCPの前に1つのファイルに入れて、BCPの後に別のファイルに入力してください。

+0

これは私のコードを単純化したものです。 –

+0

@LawrencePhillips OKこれはちょっとばかげたアイデアです...私の更新を見てください... – Shnugo

関連する問題