我创建了一个表格:
然后我执行这个声明:
update test
set tname = 'Joker'
where tid % 2 = 0
它显示:
表示“中文有两行受影响”。
但如果立即执行print @@rowcount
,结果为:
还有什么,如果执行insert into test values('Paul','foo')
,结果是:
表示:
消息8101,级别16,状态1,行21.
仅当使用列列表并且IDENTITY_INSERT为ON时,您才可以在“test”表的标识列中明确设置值。
但如果然后执行print @@ERROR
,则会显示:
我认为应该是8101。
有人可以告诉我为什么吗?感谢
答案 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')