我有这样的交易,我有几个问题。
如果我要对'Master'运行它,它应该会出错,因为表'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