このような取引があり、それについていくつか質問があります。
テーブル「Year」が存在しないためエラーになる「マスター」に対してこれを実行すると、トランザクションのロールバックが表示されません。SQL は、テーブル/列が存在しないというエラーをスローするだけです。
テーブルが存在するデータベースに対して実行し、外部キー制約のためにエラーになると、トランザクションのロールバックが表示されます。
同じ結果が得られないのはなぜですか。
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO Year (YearId, FiscalYear)
VALUES (NewId(), 2014)
COMMIT
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK
PRINT 'ERROR'
DECLARE @ErrMsg nvarchar(4000)
, @ErrSeverity int
SELECT @ErrMsg = ERROR_MESSAGE(),
@ErrSeverity = ERROR_SEVERITY()
RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH
GO