SQL Server @@ERROR 用法

@@error是系统函数,当没有发生错误时返回0,如果发生错误时@@error<>0,并返回错误号,每个SQL语句执行完,@@error值都会变。

@@error只记录当前错误,如果存储过程执行多个操作,就要每次都判读@@error是否出现错误,比较麻烦。
今天就遇到这个问题了,下面是一个简单的例子,就可以解决这个问题。

create  proc proc_Test
--根据ID修改表
@id int ,          --id
@name varchar(20)   --名字
as
begin transaction
declare @errors int        --错误数

--根据id修改
 update table1  set [email protected] where [email protected]
--设置接受错误数
set @[email protected][email protected]@error

r

--查询销售id
select  @xsbfid =id from receipt2 where [email protected]
set @[email protected][email protected]@error

--插入样机表
insert into table2
(name )values(@name)
set @[email protected][email protected]@error

if (@errors<>0)
begin
    rollback  transaction 
end
else
begin
    commit transaction 
end

只是声明了一个变量,每次用它来累积错误值。嘻嘻,问题就解决了。

http://blog.163.com/happy_2010_zyj/blog/static/151148756201041044646221/

@@ERROR:当前一个语句遇到错误,则返回错误号,否则返回0。需要注意的是@ERROR在每一条语句执行后会被立刻重置,因此应该在要验证的语句执行后检查数值或者是将它保存到局部变量中以备将来使用。

DECLARE @num INT,@temp INT
DECLARE @err INT

SELECT @temp=0;
SET @err=0
SET @num =2/@temp;
 --执行后@@ERROR为8134

PRINT @@ERROR
 --执行后@@ERROR为0
IF @@ERROR = 0
BEGIN
    PRINT @@ERROR
END

分析:上面的SQL语句出现除0的错误,抛出错误信息,所以在执行除0语句后的@@Error数值是8134,但是在执行第一个Print @Error语句输出错误信息之后,注意,此时@@Error的数据立即变成了0!,这一点非常重要,因为@@Error在每一条语句执行后立刻被重置!同样的道理,执行IF @@ERROR = 0语句后@@ERROR的数值仍然是0,因为这句话也没有发生错误!

原文地址:https://www.cnblogs.com/Alex80/p/10215957.html

时间: 2024-11-06 07:44:50

SQL Server @@ERROR 用法的相关文章

Invalid object name ‘sys.configurations’. (Microsoft SQL Server, Error: 208)

http://blogs.msdn.com/b/ramaprasanna/archive/2009/09/16/invalid-object-name-sys-configurations-microsoft-sql-server-error-208.aspx ---------- When you use Microsoft SQL Server Management Studio 2008 to access SQL Azure, if you get the following error

Microsoft SQL Server, Error: 823 一次真实的经历

1,Case Description 有Dev skype 我,说在使用SSMS 打开DB的时候,报错 “The operating system returned error 59(An unexpected network error occurred.) to SQL Server during a read at offset 0x00000000474000 in file '\\Serveryyy\\xxxx.ndf'. Additional messages in the SQL

SQL Server特殊用法笔记

声明: 本文为转载,感谢原作者的辛勤付出. 原博客地址为:http://www.cnblogs.com/icyJ/p/SQL_Statement.html 1.MERGE用法:关联两表,有则改,无则加 create table #AAA(id int,A int,AA int,AAA int,B int) create table #BBB(A int,B int) insert into #AAA select 1,1,1,1,null union select 2,2,2,2,null un

SQL Server error &quot;Xml data type is not supported in distributed queries&quot; and workaround for it

Recently while working with data migration,got an error while running a following query where Server2 has beed added as linked server. SELECT * FROM Server1.Database1.dbo.Table1 WHERE Column1 NOT IN (SELECT Column1 FROM Server2.Database2.dbo.Table1)

SQL Server 时间用法1-时间转换字符串

SELECT CONVERT(VARCHAR(100),GETDATE(),1)  --- 09/14/15 SELECT CONVERT(VARCHAR(100),GETDATE(),2)   ---15.09.14 SELECT CONVERT(VARCHAR(100),GETDATE(),3)   ---14/09/15 SELECT CONVERT(VARCHAR(100),GETDATE(),4)-  --14.09.15 SELECT CONVERT(VARCHAR(100),GET

Sql Server isnull() 用法

Isnull(null,1); 返回 1 isnull(1,3);返回 3

sql server output用法说明

带有output的insert语句. @@identity只能返回当前会话最后生产的标识列.  如果一次性插入多条语句的话. 需要返回这些自动生产的标识列. 那么outpu就派上用场了. declare @temp table(k int, v nvarchar(200)) insert into t1(datacol) output inserted.keycol, inserted.datacol into @temp select * from @temp ----------------

SQL Server merge用法

有两个表名:source 表和 target 表,并且要根据 source 表中匹配的值更新 target 表. 有三种情况: source 表有一些 target 表不存在的行.在这种情况下,需要将 source 表中的行插入到 target 中. target 表有一些 source表不存在的行.这种情况下,需要从 target 表中删除行. source 表的某些行具有与 target 表中的行相同的键.但是,这些行在非键列中具有不同的值.这种情况下,需要使用来自 source 表中的值更

解决SQL Server管理器无法连接远程数据库Error: 1326错误

解决SQL Server管理器无法连接远程数据库Error: 1326错误 我们在在使用SQL Server时都会遇到使用SQL Server Management Studio无法连接远程数据库实例的问题,错误描述信息摘录如下: An error has occurred while establishing a connection to the server. (provider: Named Pipes Provider, error: 40 – Could not open a con