在SQL SERVER存储过程中这样写:
create proc AAA
as
begin tran
update A set ......
if @@error<>0 --A
rollback tran
update B set ......
if @@error<>0 --B
rollback tran
commit tran
go请问这样写会不会有问题?
SQL Server中@@error代表什么意思?
当出现SQL SERVER自身错误时(非存储过程AAA出错),@@error值会不会变化?
在DELPHI中调用此过程时,会出现数据没有变化的情况,什么原因?
create proc AAA
as
begin tran
update A set ......
if @@error<>0 --A
rollback tran
update B set ......
if @@error<>0 --B
rollback tran
commit tran
go请问这样写会不会有问题?
SQL Server中@@error代表什么意思?
当出现SQL SERVER自身错误时(非存储过程AAA出错),@@error值会不会变化?
在DELPHI中调用此过程时,会出现数据没有变化的情况,什么原因?
解决方案 »
- 在文本的特定位置插入空格
- 初学QucikReport,如何绑定输出一个数据表的所有内容?
- cxGrid主从表对从表中的字段进行总计的问题
- 新手提问
- 如何在一个日期变量上加上一天?
- 请问??
- 请问测试数据库程序时,如何迅速获得海量的数据,是否有专用生成工具呢?
- 哪位大侠知道在delphi6中怎么用msxml检查xml文件是否正确,谢谢
- reportbuilder报表工具中有分页符吗?
- 为什么我的 Query 在 ApplyUpData 时会 Updata fail
- 关于两台计算机之间图象文件传偷,请各位大侠帮个忙~!
- 关于Delphi操作Excel的两个问题。有兴趣的朋友进来探讨一下。(实在没办法了)
在 Transact-SQL 语句完成后,马上把 @@ERROR 存储到一个整型变量中。此变量的值可供以后使用。
在生成错误的批处理、存储过程或触发器中,@@ERROR 是 Microsoft® SQL Server™ 2000 错误的唯一可用部分。错误的所有其它部分,如严重度、状态、包含替换字符串(如对象名称)的消息文本,都只返回到那些能够用 API 错误处理机制进行错误处理的应用程序中。同时,@@ERROR 只由错误产生,而不由警告产生;因此,批处理、存储过程和触发器对于那些可能已经产生了的警告没有可见性。@@ERROR 通常用于表示存储过程的成功或失败。整型变量初始化为 0。完成每个 Transact-SQL 语句后,都要测试 @@ERROR 是否为 0。如果 @@ERROR 不是 0,将被存储在变量中。存储过程然后在 RETURN 语句中返回变量。如果过程中的 Transact-SQL 语句都没有错误,变量保持为 0。如果一个或多个语句生成错误,则变量包含最后的错误号。
@@error=0表示事务中的所有update或insert都已成功执行,反之至少有一条执行出错,这时你就可以用rollbacktrans,取消操作了
@@error是SQL内部全局变量,如果SQL都出来错误,那数据的准确性当然就没有保证了,但这种情会有,但非常非常少,可不用考虑
内部调用没有问题,而是SQL语句有错。