2010-01-15 32 views
0

我有下面的SQL觸發一個SQL 2005框是應該幫我複製某一個人信息到另一個數據庫用於報表和其他各種東西作爲參考。跨數據庫SQL觸發史詩失敗

我有1個名爲Connect的數據庫,這是當前應用程序在tblPerson上操作Person數據的地方。我有另一個數據庫,在同一個物理盒子上,名爲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

您的更新語句看起來不正確 - 您在'from'中引用表m,i和d,但僅指定'where'中m和d表之間的連接,但您使用i來設置新值 - 我不知道這是否會導致你看到的錯誤,但它確實看起來像一個問題。 – Ray 2010-01-15 15:36:00

+0

謝謝雷,但讓我看看我能否澄清。 'd'有舊信息。 '我'有新的信息。 'm'是我正在寫入的另一個數據庫中的表。我使用'd = m'來確保我正在更新正確的記錄,但我希望'i'中的數據被寫入'm',因爲這是更新的信息。 – 2010-01-15 15:54:54

回答

1

更換

UPDATE MATRIX.dbo.tblIndentificationMap 

m 
在第一行

。同樣在SET區域,你不需要對m的引用(儘管我不認爲它們有任何傷害,但它使得它更難以維護)。

由於您不一致地引用別名和真實姓名,您的SET語句會很混亂。