質問

ストアドプロシージャにテーブルを作成し、BCPを使用してコンテンツをエクスポートしてからこのテーブルをドロップします。 BCPコマンドは次のように見えます:

SET @sqlop = 'BCP "SELECT blah FROM MYTABLE" queryout "' + @txt4print* 
             + '" -b 50000 -c -t"," -S"server" -U"uname" -P"pswd"'
exec master..xp_cmdshell @sqlop       --, NO_OUTPUT

通常、ストア手順にエラーがある場合、それは Message SQL Serverで。ただし、BCPからの出力はメッセージとして印刷されていません。したがって、Matlabでエラーインスタンスをキャプチャできません。文字列をキャッチする方法はありますか error 以下に示すように?この出力をaとして返すことはできますか Message SQL Serverから? enter image description here

私は高度なSQLプログラマではありません。ありがとう!

役に立ちましたか?

解決

ここに出力があるので、その出力をキャプチャして、それからエラーを手動で強制することができるはずです。

DECLARE @Output TABLE (OutputMessage NVARCHAR(4000));

SET @sqlop = 'BCP "SELECT blah FROM MYTABLE" queryout "' + @txt4print* 
             + '" -b 50000 -c -t"," -S"server" -U"uname" -P"pswd"'

INSERT INTO @Output
exec master..xp_cmdshell @sqlop       --, NO_OUTPUT

DELETE FROM @Output WHERE OutputMessage IS NULL

DECLARE @Statement NVARCHAR(MAX)

WHILE (SELECT COUNT(*) FROM @Output) > 0
BEGIN
    SELECT TOP 1 @Statement = OutputMessage FROM @Output
    IF @Statement LIKE '%Error%'
    BEGIN
      SET @Statement = 'Unexpected error in procedure: ' + @Statement
      RAISERROR(@Statement, 16, 1)
    END
END

または、エラーではなくメッセージが必要な場合は、同様の効果のために印刷を使用できるはずです。

http://technet.microsoft.com/en-us/library/ms176047.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top