Sql server 具有主键的表上的触发器是否可以在插入或删除的表中出现两次相同的主键时触发?
如果我有一个表,Sql server 具有主键的表上的触发器是否可以在插入或删除的表中出现两次相同的主键时触发?,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,如果我有一个表,T,带有主键,ID CREATE TABLE T ( ID INT NOT NULL PRIMARY KEY, Data BIT NOT NULL DEFAULT (0) ) 并在其上创建一个后插入触发器 CREATE TRIGGER T_Trigger ON T FOR INSERT, UPDATE, DELETE AS BEGIN -- Trigger body END 插入的表中的ID列是否可能有重复的值?或者让已删除的表的ID列具有重复的值
T
,带有主键,ID
CREATE TABLE T (
ID INT NOT NULL PRIMARY KEY,
Data BIT NOT NULL DEFAULT (0)
)
并在其上创建一个后插入触发器
CREATE TRIGGER T_Trigger ON T
FOR INSERT, UPDATE, DELETE
AS
BEGIN
-- Trigger body
END
插入的表中的ID
列是否可能有重复的值?或者让已删除的表的ID
列具有重复的值
显然,ID
可能会在插入的和删除的表中出现一次
我无法想象一个DML语句会导致触发器触发,而相同的主键会在INSERTED
或DELETED
表中出现两次。即使是MERGE
也有详细的文档说明,“MERGE语句不能多次更新同一行,也不能更新和删除同一行。”ID
上的PRIMARY KEY
约束和每个DML语句的有限能力似乎应该结合起来,以使其在每次触发器触发中保持唯一性。否。插入和删除的表是操作的最终(即“之后”)状态,在FOR/after触发器方面。对于INSERTED而非触发器,插入和删除的表是最终状态。嗯,删除的表实际上是这些行的前一个状态,而插入的是当前状态。我认为不,主键列在插入或删除的表中不可能有重复项。