Pri*_*ess 1 sql t-sql transactions
我有这样的交易,我有几个问题.
如果我在"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
Run Code Online (Sandbox Code Playgroud)
我猜想当表不存在时,在解析/编译代码并且从不执行代码时会发生错误,因此没有事务可以回滚.
当表存在时,必须执行代码并启动事务.然后该错误导致回滚.
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |