0

我创建了一个像这样的表:

在此处输入图像描述

然后我执行这个语句:

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

表明:

在此处输入图像描述

中文意思是“有两行受影响”。

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

在此处输入图像描述

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

在此处输入图像描述

意思是:

消息 8101,级别 16,状态 1,第 21 行。
只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能在“测试”表的标识列中显式设置值。

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

在此处输入图像描述

我认为应该是8101。

有人能告诉我为什么吗?谢谢

4

2 回答 2

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
于 2017-10-02T04:26:20.247 回答
1

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

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

更好的是,列名要明确:

INSERT INTO test (tname) VALUES ('Paul'), ('foo')
于 2017-10-02T03:57:56.970 回答