Triggers 无法将空值插入列错误

Triggers 无法将空值插入列错误,triggers,sql-server-2008-r2,null,Triggers,Sql Server 2008 R2,Null,我有一个问题,我想更新表中的一列,并使用触发器更新另一个表中的同一列。它说我不能插入NULL,但我似乎无法理解它从哪里得到NULL值。这是触发因素: CREATE TRIGGER Custom_WF_Update_WF_DefinitionSteps_DefinitionId ON WF.Definition AFTER UPDATE AS BEGIN IF UPDATE(DefinitionId) IF TRIGGER_NESTLEVEL() < 2 BEGIN ALTE

我有一个问题,我想更新表中的一列,并使用触发器更新另一个表中的同一列。它说我不能插入NULL,但我似乎无法理解它从哪里得到NULL值。这是触发因素:

CREATE TRIGGER Custom_WF_Update_WF_DefinitionSteps_DefinitionId ON WF.Definition 
AFTER UPDATE AS BEGIN 
IF UPDATE(DefinitionId) 
IF TRIGGER_NESTLEVEL() < 2 
BEGIN
    ALTER TABLE WF.DefinitionSteps NOCHECK CONSTRAINT ALL

    UPDATE WF.DefinitionSteps
    SET DefinitionId =
         (SELECT i.DefinitionId
          FROM inserted i,
               deleted d
          WHERE WF.DefinitionSteps.DefinitionId = d.DefinitionId
               AND i.oldPkCol = d.DefinitionId)
    WHERE WF.DefinitionSteps.DefinitionId IN
          (SELECT DefinitionId FROM deleted)

     ALTER TABLE WF.DefinitionSteps CHECK CONSTRAINT ALL 
END 
END
但这一次失败了:

UPDATE [CCHMergeIntermediate].[WF].[Definition] 
SET DefinitionId = target.DefinitionId 
FROM [CCHMergeIntermediate].[WF].[Definition] source 
INNER JOIN [centralq3].[WF].[Definition] target 
ON (((source.Name = target.Name) OR (source.Name IS NULL AND target.Name IS NULL)))
我得到以下错误:

Msg 515,16级,状态2,程序自定义\u WF\u更新\u WF\u定义步骤\u定义ID,第7行 无法将值NULL插入到“定义ID”列、表“CCHMergeIntermediate.WF.DefinitionSteps”中;列不允许空值。更新失败

如果执行select而不是update语句,如下所示:

SELECT source.DefinitionId, target.DefinitionId
FROM [CCHMergeIntermediate].[WF].[Definition] source 
INNER JOIN [centralq3].[WF].[Definition] target 
ON (((source.Name = target.Name) OR (source.Name IS NULL AND target.Name IS NULL)))
我得到这个结果: 很抱歉外部链接,我没有足够的声誉在这里发布图片


我做错了什么?我看不到什么?我遗漏了什么?

问题在于该条件下的触发器。我修改了第二个,其中从I.oldPkCol=d.DefinitionId到I.oldPkCol=**d.oldPkCol**,它成功了

UPDATE WF.DefinitionSteps
SET DefinitionId =
     (SELECT i.DefinitionId
      FROM inserted i,
           deleted d
      WHERE WF.DefinitionSteps.DefinitionId = d.DefinitionId
           AND i.oldPkCol = **d.oldPkCol**)
WHERE WF.DefinitionSteps.DefinitionId IN
      (SELECT DefinitionId FROM deleted)
UPDATE WF.DefinitionSteps
SET DefinitionId =
     (SELECT i.DefinitionId
      FROM inserted i,
           deleted d
      WHERE WF.DefinitionSteps.DefinitionId = d.DefinitionId
           AND i.oldPkCol = **d.oldPkCol**)
WHERE WF.DefinitionSteps.DefinitionId IN
      (SELECT DefinitionId FROM deleted)