SQL事务?
发布网友
发布时间:2022-04-30 05:05
我来回答
共3个回答
热心网友
时间:2022-04-08 09:57
SQL中没有像 DELPHI 那样 TRY Finnal 的方式,通常都是这样写:
--判断表的存在性
If NOT Exists(select * from dbo.sysobjects where name='sysobjects')
--自定义错误号,说明表不存在。
Return -1
--执行查询
select * from table1
--有错误反回错误号
If @@Error<>0
Return @@Error
--正确反回0
Return 0
--补充回答
在Sql Server中,是没有象开发工具那种的容错处理,他有的只是判断对象的存在性及用事务来解决数据的完整性、一致性等等。但通用的做法都是在可能发生错误的地方设置错误处理或反回错误号,自定义的也可以。这样在程序里我们可以捕获错误号来进行相应的错误提示。
--补充回答
“多人同时访问时一旦某个事务永久锁定了一个表,那其它人都无法访问了”你说的这个问题是数据库对象锁定问题,跟你提问的问题有所区别,数据库对象锁定实质是由DBMS完成的,如果对象真的被锁定了的话,只有在对象被解锁以后才能对其进行操作,当然能进行什么样的操作也跟锁的类型及类度相关。开发者对对象进行加锁,也要分不同操作进行,操作完成后DBMS会自动解锁。
如果出现像你说的死所现像的话,DBMS是不能完成解锁功能的,只有人工进行处理了。
至于你提出的问题,你的想法是好的,但是DBMS都是通过提前判断来进行容错的,或者抛出错误号在程序中进行捕获处理。
热心网友
时间:2022-04-08 11:15
if @@error<>0 and @@TranCount>0
if @@TranCount>0 goto error
commit tran AA
return
热心网友
时间:2022-04-08 12:50
你可以提前检查sysobjects是不是有table1呀
类似try异常的SQL我也没见过