数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQL Server的怪辟:异常与孤立事务[1]


发布日期:2021年11月06日
 
SQL Server的怪辟:异常与孤立事务[1]

首先从SQLServer中Error讲起SQL中错误处理有些怪辟 错误级别同是但结果都不同

以下是引用片段

select * from 一个不在的表

if @@error<>

print 这个没有输出

go

raiserror()

if @@error<>

print 这个输出了

go

exec(select * from 一个不在的表)

if @@error<>

print 这个输出了

go

exec sp_executesql Nselect * from 一个不在的表

if @@error<>

print 这个输出了

这样你可以发现通过exec或sp_executesql执行可疑的sql这样就可以在后面捕捉到被异常终止的错误

引出孤立事务

孤立事务的产生

以下是引用片段

select @@trancount 当前连接的活动事务数 当前连接的活动事务数为

begin tran

select * from 一个不在的表

if @@error<>

begin

print 没有执行到这里来!

if @@trancount<> rollback tran

end

commit tran

select @@trancount 当前连接的活动事务数 执行后你看看 当前连接的活动事务数为且重复执行会每次累加这是很耗资源的

应为rollback根本就没有被回滚

使用现有手段解决孤立事务

以下是引用片段

print @@trancount print 当前连接的活动事务数 当前连接的活动事务数为

if @@trancount<> rollback tran 在这里写可以让孤立事务只保持到下次你的过程被调用

begin tran

select * from 一个不在的表

if @@error<>

begin

print 没有执行到这里来!

if @@trancount<> rollback tran

end

commit tran

执行后你看看 当前连接的活动事务数为但重复执行不会累加

print @@trancount print 当前连接的活动事务数

[] []

               

上一篇:用MySQL实现SQL Server的Sp

下一篇:SQL Server的怪辟:异常与孤立事务[2]