【发布时间】:2010-01-15 15:28:42
【问题描述】:
我在 SQL 2005 框上有以下 SQL 触发器,应该帮助我将某些人员信息复制到另一个数据库,以用于报告和各种其他事情作为参考。
我有 1 个名为 Connect 的数据库,当前应用程序在其中操作 tblPerson 上的人员数据。我有另一个数据库,在同一个物理盒子上,名为 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
【问题讨论】:
-
您的更新语句看起来错误 - 您在“from”中引用表 m、i 和 d,但仅在“where”中指定 m 和 d 表之间的连接,但您使用 i设置新值 - 我不知道这是否会导致您看到的错误,但它确实看起来像一个问题。
-
谢谢雷,但让我看看能否澄清一下。
d有旧信息。i有新信息。m是我正在写入的不同数据库中的表。我使用d = m来确保我正在更新正确的记录,但我希望将来自i的数据写入m,因为这是更新的信息。
标签: sql sql-server-2005 triggers