Sql server 使用触发器更新多个表-SQL Server
我需要根据tableB中的插入更新tableA。我已经创建了一个触发器,当一行被插入到tableB中时触发它,并简单地将它复制到tableA(这正是我想要的)。但当我更新tableB中的现有记录时,问题来了,tableA中的行已经存在,并且具有相同的主键 为了解决这个问题,我尝试删除tableA中主键与更新的行匹配的现有行,然后简单地从“inserted”表中插入该行。但是,tsql不允许我从触发器中删除我,并给出一个错误,声明“插入的多部分标识符”。Id“无法绑定” 以下是我试图在代码方面实现的目标:Sql server 使用触发器更新多个表-SQL Server,sql-server,tsql,Sql Server,Tsql,我需要根据tableB中的插入更新tableA。我已经创建了一个触发器,当一行被插入到tableB中时触发它,并简单地将它复制到tableA(这正是我想要的)。但当我更新tableB中的现有记录时,问题来了,tableA中的行已经存在,并且具有相同的主键 为了解决这个问题,我尝试删除tableA中主键与更新的行匹配的现有行,然后简单地从“inserted”表中插入该行。但是,tsql不允许我从触发器中删除我,并给出一个错误,声明“插入的多部分标识符”。Id“无法绑定” 以下是我试图在代码方面实现
delete from dbo.CurrentItems where dbo.CurrentItems.CurrentItemId = INSERTED.Id
INSERT INTO CurrentItems
SELECT * FROM INSERTED
WHERE IsActive = 1
有什么想法吗?在DELETE FROM语句中,必须将插入的伪表添加到正在操作的表中(在FROM子句中),如下所示:
DELETE dbo.CurrentItems
FROM dbo.CurrentItems
, INSERTED
WHERE dbo.CurrentItems.CurrentItemId = INSERTED.Id
INSERT INTO CurrentItems
SELECT * FROM INSERTED
WHERE IsActive = 1
或者,可以使用内部联接:
DELETE dbo.CurrentItems
FROM dbo.CurrentItems CI
INNER JOIN INSERTED I ON CI.CurrentItemId = I.Id
在DELETE FROM语句中,必须将插入的伪表添加到正在操作的表中(在FROM子句中),如下所示:
DELETE dbo.CurrentItems
FROM dbo.CurrentItems
, INSERTED
WHERE dbo.CurrentItems.CurrentItemId = INSERTED.Id
INSERT INTO CurrentItems
SELECT * FROM INSERTED
WHERE IsActive = 1
或者,可以使用内部联接:
DELETE dbo.CurrentItems
FROM dbo.CurrentItems CI
INNER JOIN INSERTED I ON CI.CurrentItemId = I.Id
为什么不能在更新TableB中的行时只更新TableA中现有的行呢??更新而不是删除/插入
您可以有一个后插入触发器,它现在可以执行您想要的操作,再加上一个后更新触发器,它将更新TableA中的行(而不是插入新行)。为什么不能在更新TableB中的行时只更新TableA中的现有行??更新而不是删除/插入
您可以有一个后插入触发器,它现在可以执行您想要的操作,再加上一个后更新触发器,它将更新TableA中的行(而不是插入新的行)。您说过您有一个触发器,它在“将行插入tableB”时触发。这样你就有了触发插入的触发器。在我看来,你也有触发更新的能力。您是否希望在更新时也触发触发器?如果没有,请从触发器定义中删除“更新”
Randy您说过您有一个触发器,当“将一行插入表B”时触发。这样你就有了触发插入的触发器。在我看来,你也有触发更新的能力。您是否希望在更新时也触发触发器?如果没有,请从触发器定义中删除“更新”
Randy单独的触发器——一个用于插入,一个用于更新(那么删除呢?)——可能会执行得更好。@Irfanldrees:不客气@菲利普·凯利,我不能不同意你的观点,但现在海报上是这么问的。他想知道为什么他的DELETE语句不起作用。单独的触发器——一个用于插入,一个用于更新(那么删除呢?)——可能会执行得更好。@Irfanldrees:不客气@菲利普·凯利,我不能不同意你的观点,但现在海报上是这么问的。他想知道为什么他的删除语句不起作用。