2016-04-27 15 views
1

Sybaseに簡単なSQLインサートを使用してアップロードする予定のバルクデータがあります。 いくつかの制約違反に起因するSQLの一部が失敗しました。Sybaseのinsert sqlのリターンコード

私は一度にすべてのsqlsを実行するので、どのsqlが失敗したのかわかりません。

DBクライアントコンソールはちょうど

Attempt to insert duplicate key row in object 'Employee' with unique index 'Employee_uk' 
(0 rows affected) 

は、だから私は、彼らが失敗した場合は、各INSERT文の実行と印刷をキャプチャするためにINTを持つことを考えていたが、これを印刷しています。

私は手続きのためにこれを見つけたが、私はSQLのためにそれを行うための方法を見つけるように見えることはできません

DECLARE @status INT 
EXECUTE @status = proc_sample 
IF @status != 0 
    PRINT 'procedure failed' 

は、挿入のためのリターンコードを取得する方法はありますか?それとも他の方法ですか?

注:私はそれほど長い時間がかかり、余裕がないので、各SQLに対してBEGINとENDを使用したくありません。

乾杯!

答えて

2

INSERT文の直後に@@ errorをチェックする必要があります(実行していると仮定します)。 0でなければエラー状態になります。ただし、エラーチェックはINSERT直前に行わなければなりません。 他のステートメントを実行すると、エラーステータスが消去されます。 @errorのベストコピー:

DECLARE @err INT 
[...] 
INSERT INTO mytable.... 
SET @err = @@ERROR 
IF @err <> 0 
BEGIN 
... error action... 
END 
+0

ありがとうRobV !!!! –