@@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
2008-02-15 17:05
756 查看
比如下面的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 说明书中写得很清楚,就是没注意。
HELLO,你好!
我刚好也有个问题,用BAIDU搜索就找到你的这篇文章,@@ERROR可以扑捉到错误,但是你的前面有错误的语句在SQL不能通过,比如很明显的错误,例如要插入的表已经不存在或者栏位没有指定值,不能为空,SQL SERVER的查询编译器没有到你的IF @@ERROR就报错,那么根本谈不上用到出错就ROLLBACK,你觉得有办法解决吗?
程序外部扑作。
没有执行到@@ERROR就报错,那都是严重的SQL 错误,不应该用@@ERROR 来朴捉。
嗯,问完后觉得自己好像咬烂自己的嘴巴,又问了一个蠢问题:P
谢谢回复!
@@ERROR一直让我有点头痛,我对ERROR看的太肤浅,有个vb系统,里面很多这样的嵌套
On Error GoTo errHandle
DBConn.BeginTrans
...commit....
errHandle:
UpdateDYWhenDelCS = "Error #" & Err.Number & ": " & Err.Description
DBConn.RollbackTrans
很可惜,也是经常没有友好报错就over啦,因为里面有单引号的问题,如果处理过程中有循环,更可怕,好像有rollback,但是只是部门,令我一直很担心
非常感谢!我找了半天才找到,感谢高人的提点!
路过,路过
看起来不错
臭
获取行数可以使用@@CURSOR_ROWS ,就没有这个限制了
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 TEAHELLO,你好!
我刚好也有个问题,用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 ,就没有这个限制了
相关文章推荐
- @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
- @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息
- @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
- @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。(ZT)
- @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
- @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
- PDOstament对象执行execute()函数,只要是sql语句正确都是返回true
- PDOstament对象执行execute()函数,只要是sql语句正确都是返回true
- PDOstament对象执行execute()函数,只要是sql语句正确都是返回true
- 用SQL%ROWCOUNT返回SQL语句的影响数量
- 一条SQL 语句执行后返回2笔受影响--如果没有触发器,那就是点到"包括实际的执行计划"!
- SQL @@error&@@rowcount 返回异常及影响行数
- sql-insert一条语句执行多条数据插入
- AEF 中的SQL语句执行能否返回数据集(DataTable)?
- 使用C#对MySQL数据库执行存在中文的SQL语句,不返回值的问题
- sql语句执行插入后返回ID
- 表单中通过sql语句,一次操作,执行多个sql,返回多个值的方法
- mysql,dos下执行SQL语句创建存储过程出错ERROR 1064 (42000):
- 执行SQL语句返回ID值
- 一次ORA-4030问题诊断及解决【解决思路不错,说明了对象的统计信息与优化器的优化操作(即选择执行一个SQL语句在该优化参数环境下最佳的执行计划)间的关系】