究竟什么"(X行(s)受影响)"是什么意思?

Sun*_*ung 4 sql sql-server-2012

我运行了一个简单的查询:

UPDATE table

SET user_id = '123456'

WHERE user_id = '234567'
Run Code Online (Sandbox Code Playgroud)

然后我收到了错误消息:

(2942 row(s) affected)
Msg 2627, Level 14, State 1, Line 3
Violation of PRIMARY KEY constraint 'PK__users__6B24EA82'. Cannot insert duplicate key in object 'dbo.users'. The duplicate key value is (123456).
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)

这是否意味着我实际上已经对2942行进行了更改?它看起来并非如此.我的搜索没有太多运气.任何帮助表示赞赏.

Hol*_* IV 5

不,这意味着您将对2942行进行更改,除非其中一个或多个违反PRIMARY KEY约束,因此它们将被回滚.


Gor*_*off 5

假设这user_id是一个主键(错误消息根据错误消息中的值建议),那么查询:

UPDATE table
    SET user_id = '123456'
    WHERE user_id = '234567';
Run Code Online (Sandbox Code Playgroud)

永远不会影响到一行以上table. user_id是一个主键,所以它是独一无二的.该where条款最多只能选择一行.

这表明桌面上有一个触发器.我认为2,942来自触发而非直接来自此声明.如果我不得不猜测,它是一个替代更新触发器,可能会影响另一个表.

该错误意味着您已经在表中有一行user_id = '123456',因此不应对该表进行更新.

(注意:这个想法的变化是可能的.触发器可能正在更新另一个表,主键违规可能就在那里.上面的情况似乎更可能出现.)