跨DB SQL触发器史诗失败

时间:2010-01-15 15:28:43

标签: sql sql-server-2005 triggers

我在假设的SQL 2005框上有以下SQL触发器,以帮助我将某些人物信息复制到另一个用于报告的数据库以及其他各种事物作为参考。

我有一个名为Connect的数据库,这是当前应用操作tblPerson上的人员数据的地方。我有另一个DB,在同一个物理盒子上,名为MATRIX,其中一个新应用程序操纵它的数据。我正在尝试在MATRIX中构建一个名为tblIdentificationMap的表,它只存储我们在内部不同应用程序中的所有各种ID。

当我启用此触发器并尝试更新tblPerson时,我收到以下错误 - > Msg 208, Level 16, State 1, Procedure tblPersonIDMap_OnUpdate, Line 15 Invalid object name 'MATRIX.dbo.tblIndentificationMap'.

这是我的UPDATE语句 - >

`  use Connect
  update tblPerson
  set MiddleName = 'Fakey'
  where PersonID = 258243`

这是我的触发器 - >

ALTER TRIGGER [dbo].[tblPersonIDMap_OnUpdate] 


ON  [dbo].[tblPerson] 
   AFTER UPDATE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;





UPDATE MATRIX.dbo.tblIndentificationMap
        SET     m.PersonID = i.PersonID
                ,m.FirstName = i.FirstName
                ,m.MiddleName = i.MiddleName
                ,m.LastName = i.LastName

    FROM MATRIX.dbo.tblIdentificationMap m, inserted i, deleted d
    WHERE d.PersonID = m.PersonID
END

1 个答案:

答案 0 :(得分:1)

替换

UPDATE MATRIX.dbo.tblIndentificationMap

m

在第一行。同样在SET区域你不需要引用m(虽然我认为它们没有任何伤害,但它使得维护更加困难)。

您的SET语句很混乱,因为您不一致地引用了别名和真实姓名。