私はスクリプトのテストを行っていますが、この Try Catch でテストしている Update 句が次のようになっていることを確認したいと思います。
BEGIN TRY
BEGIN TRAN
UPDATE NAME
SET NAME.ADDBY =
(CASE WHEN NAME.ADDBY = 'CONVERSION' THEN 'CONVERTED'
WHEN NAME.ADDBY = 'CJDOG'THEN 'CJDAREME'
WHEN NAME.ADDBY = 'npalerm' THEN 'REALLYLONGDETAILEDTEXT'
ELSE NAME
END)
COMMIT TRAN
END TRY
BEGIN CATCH
IF @@TRANCOUNT >0
PRINT ERROR_MESSAGE()
ROLLBACK TRAN
END CATCH
PRINT @@TRANCOUNT
失敗すると、他の行が更新され、エラーが発生しなかった行だけが通過します。
現在、TRY CATCH にあるため、何も通過しないことを確認する ROLLBACK があります。
しかし、UPDATE 部分だけを実行しようとすると、エラーを引き起こさない部分を更新する代わりに、エラーによってスクリプト全体が終了します。この場合、npalerm は長すぎます。
何か案は?
説明が長いことはわかっていますが、更新を含めることもできましたが、詳細な目的のためにキャッチに含めました。