比如下面的SQL 语句:
select EmployeeID from employees -- 这条SQL 语句返回9条记录
print(@@error)
print(@@ROWCOUNT)
返回的结果是:
(9 row
affected)
0
0
而
select EmployeeID from employees -- 这条SQL 语句返回9条记录
print(@@ROWCOUNT)
print(@@error)
返回的结果是:
(9 row
affected)
9
0
原因,后一个打印出来的是前一个print 执行后的对应变量的结果。
如果想在一个语句执行后,即获得 @@ROWCOUNT 也获得 @@error,需要用一个SQL 语句把它们读出来:
declare @a int ,@b int
select EmployeeID from employees -- 这条SQL 语句返回9条记录
select @a = @@ROWCOUNT,@b = @@error
print(@a)
print(@b)
在这个一句读取数据中,先取那个都无所谓。也就是 select @b = @@error,@a = @@ROWCOUNT 也可以。但是必须是一句,如果变成两句,就又有上面的问题了。
declare @a int ,@b int
select EmployeeID from employees -- 这条SQL 语句返回9条记录
select @b = @@error
select @a = @@ROWCOUNT
print(@a)
print(@b)
返回结果:
(9 row
affected)
1
0
declare @a int ,@b int
select EmployeeID from employees -- 这条SQL 语句返回9条记录
select @a = @@ROWCOUNT
select @b = @@error
print(@a)
print(@b)
返回结果:
(9 row
affected)
9
0
今天的一个Bug 就跟这个有关,找了很久,才发现是这里的原因。 SQL 说明书中写得很清楚,就是没注意。
反馈
#re: @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
2005-7-25 17:33 by
MORNING TEA
HELLO,你好!
我刚好也有个问题,用BAIDU搜索就找到你的这篇文章,@@ERROR可以扑捉到错误,但是你的前面有错误的语句在SQL不能通过,比如很明显的错误,例如要插入的表已经不存在或者栏位没有指定值,不能为空,SQL SERVER的查询编译器没有到你的IF @@ERROR就报错,那么根本谈不上用到出错就ROLLBACK,你觉得有办法解决吗?
#re: @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
2005-7-25 17:36 by
ghj1976
程序外部扑作。
没有执行到@@ERROR就报错,那都是严重的SQL 错误,不应该用@@ERROR 来朴捉。
#re: @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
2005-7-26 9:15 by
MORNING TEA
嗯,问完后觉得自己好像咬烂自己的嘴巴,又问了一个蠢问题:P
谢谢回复!
@@ERROR一直让我有点头痛,我对ERROR看的太肤浅,有个vb系统,里面很多这样的嵌套
On Error GoTo errHandle
DBConn.BeginTrans
...commit....
errHandle:
UpdateDYWhenDelCS = "Error #" & Err.Number & ": " & Err.Description
DBConn.RollbackTrans
很可惜,也是经常没有友好报错就over啦,因为里面有单引号的问题,如果处理过程中有循环,更可怕,好像有rollback,但是只是部门,令我一直很担心
#re: @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
2005-9-16 16:39 by
pyd
非常感谢!我找了半天才找到,感谢高人的提点!
#re: @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
2005-11-18 20:02 by
jojo
路过,路过
看起来不错
#re: @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
2006-7-18 16:31 by
123
臭
#re: @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
2006-10-4 15:44 by
DAAN
获取行数可以使用@@CURSOR_ROWS ,就没有这个限制了
分享到:
相关推荐
例如,@@ROWCOUNT返回上一个操作影响的行数,@@ERROR返回最近执行的语句的错误号。你可以这样使用它们: ```sql DECLARE @RowCount int INSERT INTO Customers (CustomerName, ContactName) VALUES ('NewCo', 'New...
- `@@ROWCOUNT`:返回上一条SQL语句影响的行数,可用于检查是否进行了数据修改。 3. 局部变量: 局部变量在批处理或脚本中用于存储数据。它们可以作为计数器、保存数据供条件语句判断或存储存储过程的返回值。声明...
- `@@ROWCOUNT`:返回上一个SQL语句影响的行数。 - `@@TRANSCOUNT`:返回当前连接的活动事务数。 4. 数据库对象的操作: - `ADD CONSTRAINT`:添加数据表的约束,例如主键(PRIMARY KEY)、外键(FOREIGN KEY)...
3. **@@ROWCOUNT**:此变量返回的是上一个SQL语句影响的行数。如果语句没有影响任何行,它的值将被设置为0。这对于统计操作结果很有帮助,例如更新或删除语句。 4. **@@DBTS**:这个全局变量返回当前数据库的时间戳...
`@@ERROR`返回上一个Transact-SQL语句执行后的错误号。如果上一个语句没有错误,则返回0。这是捕获和处理SQL Server中错误的关键机制之一。 #### 5. `@@FETCH_STATUS` `@@FETCH_STATUS`返回最后一次`FETCH`语句的...
在T-SQL中,`@@ERROR`是一个系统函数,用于返回上一条SQL语句执行后产生的错误编号。当执行如插入、更新或删除等数据操纵语言(DML)语句时,如果发生错误,`@@ERROR`将返回非零值。例如,尝试除以零的运算会产生一...
例如,`@@ERROR`返回最近T-SQL语句的错误代码,`@@ROWCOUNT`显示受影响的行数,而`@@VERSION`则展示SQL Server的当前版本和相关信息。 - 局部变量则由用户在批处理或脚本中声明和使用,常用于存储临时数据或作为...
- 使用`@@error`和`@@rowcount`来检查SQL语句是否成功执行。 - 通过`raiserror`抛出异常并跳转到错误处理部分。 - 事务管理确保数据的一致性和完整性。 #### 四、总结 此存储过程模板提供了创建或修改SQL Server...
- **含义**:返回上一条Transact-SQL语句影响的行数。 - **用途**:常用于验证更新或删除操作的结果。 ##### @@SERVERNAME - **含义**:返回当前服务器的名称。 - **用途**:在多服务器环境中识别当前服务器。 ###...
比如`@@error`(返回上一个语句的错误代码)、`@@identity`(返回最近插入行的标识列值)、`@@rowcount`(返回上一个语句影响的行数)、`@@version`(返回SQL Server版本信息)以及逻辑判断语句`IF`、`ELSE`,循环...
- `@@ERROR`:返回最后执行的Transact-SQL语句的错误号。 - `@@ROWCOUNT`:返回最后一条语句影响的行数,如果行数超过20亿,应使用`ROWCOUNT_BIG`。 - `@@IDENTITY`:返回最后一次插入的唯一标识值。 - `@@...
全局变量以两个@@符号开头,如@@ERROR和@@ROWCOUNT,它们由系统定义和维护,通常用于记录SQL Server服务器的状态或反映最近执行的T-SQL语句的结果。例如,@@ERROR返回最后执行语句的错误代码,如果执行成功,其值为0...
`@@error`是一个示例,它返回最后执行的SQL语句的错误号。如果执行语句时发生错误,可以检查`@@error`的值来判断是否发生了异常。 3. **逻辑控制**: SQL Server支持条件语句(如`IF-ELSE`)、循环(如`WHILE`)和...
@@ROWCOUNT返回最后一条SQL语句影响的行数,@@IDENTITY返回最后一个自动增长的ID值,@@ERROR返回最近发生的错误号。 除此之外,SQL Server 2000还有许多其他函数,如转换函数(如CAST, CONVERT)、位操作函数、系统...
- **描述**:返回上一个 Transact-SQL 语句执行的错误号。 - **用途**:错误处理,特别是在存储过程中检查异常。 - **示例**: - ```sql IF @@ERROR <> 0 BEGIN -- 在此抛出异常 -- 退出存储过程 END ``` ##...
而当需要一次性处理多个变量或者确保在复杂逻辑中捕捉到如`@@ERROR`和`@@ROWCOUNT`这样的系统变量时,`SELECT`可能更合适。 了解这些区别对于编写更高效、更稳定的SQL代码至关重要。在实际工作中,理解这些细节可以...
通过上述代码,我们可以看出这个存储过程的主要功能是检测SQL Server中出现的死锁情况,并提供有关被阻塞进程的信息,包括它们正在执行的SQL语句。这对于诊断和解决SQL Server中的死锁问题非常有帮助。此外,它还...
存储过程可以设置一个整数返回值(通过`RETURN`语句)来传递执行结果,同时,可以通过`@@ERROR`和`@@ROWCOUNT`系统变量检查执行状态。 10. **动态SQL** 存储过程内可以执行动态构建的SQL语句,增强了灵活性,但也...
- `@@ERROR`:最后一个执行的T-SQL语句的错误编号。 - `@@IDENTITY`:最后一次插入的标识值。 - `@@LANGUAGE`:当前使用的语言名称。 - `@@MAX_CONNECTIONS`:可以创建的同时连接的最大数目。 - `@@ROWCOUNT`:上一...
文档中提到了SQL Server的一些内置函数,如IDENTITY用于获取当前表中的标识列的值,ERROR用于返回错误信息,ROWCOUNT用于返回上一语句影响的行数等。这些函数对于操作数据库和进行错误处理非常有用。 3. 控制流语句...