为什么@@ ERROR始终为0且@@ ROWCOUNT始终为1?

时间:2017-10-02 03:49:07

标签: sql sql-server-2017

我创建了一个表格:

enter image description here

然后我执行这个声明:

update test 
set tname = 'Joker' 
where tid % 2 = 0

它显示:

enter image description here

表示“中文有两行受影响”。

但如果立即执行print @@rowcount,结果为:

enter image description here

还有什么,如果执行insert into test values('Paul','foo'),结果是:

enter image description here

表示:

  

消息8101,级别16,状态1,行21.
  仅当使用列列表并且IDENTITY_INSERT为ON时,您才可以在“test”表的标识列中明确设置值。

但如果然后执行print @@ERROR,则会显示:

enter image description here

我认为应该是8101。

有人可以告诉我为什么吗?感谢

2 个答案:

答案 0 :(得分:3)

第一个问题是不可复制的,我准备了演示脚本

create table test(tid int identity(1,1), tname varchar(100))
insert into test values ('James'),('Jake'),('Tom'),('Mary')

update test 
set tname = 'Joker' 
where tid % 2 = 0

select @@ROWCOUNT --returns 2

第二个问题是因为您分别运行select @error语句。这就是你获得0的原因。如果您同时运行最后两个语句,则会得到545

set  identity_insert test on
insert into test values ('James'),('Jake'),('Tom'),('Mary')
select @@ERROR --returns 545

答案 1 :(得分:1)

对于第二个问题(最好将这些问题作为两个单独的问题发布),您的SQL语句试图插入' Paul'进入tid列。您需要将这些值分开:

INSERT INTO test VALUES ('Paul'), ('foo')

更好的是,明确列名:

INSERT INTO test (tname) VALUES ('Paul'), ('foo')