この場合、「ABS」はCASTエラーであるため、バッチ処理が中止されます。 ここで説明します。Erland Sommarskog's excellent article
この記事を読む必要があります。 SQLエラーハンドリングについて今まで以上に知る必要があったこと。
また、各ステートメントをテストする必要があります。最初のINSERTが失敗した場合は、XACT_ABORT ONを持っていない限り、あなたはまだ(実行を続けていくと思います。
BEGIN TRAN
CREATE TABLE TempTable (c1 INT NULL)
INSERT INTO TempTable (c1) SELECT 1
IF @@ERROR <> 0
GOTO errhandler
INSERT INTO TempTable (c1) SELECT 'ABS'
IF @@ERROR <> 0
GOTO errhandler
PRINT 'no error'
COMMIT TRAN
GOTO exitpoint
errhandler:
PRINT 'error' -- Why does it never get here???????
ROLLBACK TRAN
exitpoint:
SQL Server 2000を持っている場合はより多くのチェックを追加する場合を除き、あなたは多くのオプションを持っていない、ISNUMERICなど
SQL Server 2005を持っている場合は、あなたが本当に新しい技術を使用する必要がありますほとんどすべてのコードと実行エラーがきれいにキャッチされ
BEGIN TRY
BEGIN TRAN
CREATE TABLE TempTable (c1 INT NULL)
INSERT INTO TempTable (c1) SELECT 1
INSERT INTO TempTable (c1) SELECT 'ABS'
PRINT 'no error'
COMMIT TRAN
END TRY
BEGIN CATCH
PRINT 'error' --It will get here for SQL 2005
ROLLBACK TRAN
END CATCH
出典
2009-03-21 00:05:34
gbn
1:。。。良い明確かつ簡潔な答えを –
+1徹底的な対応をありがとう! – James