Кросс-БД SQL Trigger Epic Failure - PullRequest
0 голосов
/ 15 января 2010

У меня есть приведенный ниже триггер SQL для поля SQL 2005, значение которого предполагается , чтобы помочь мне реплицировать определенную информацию о персонале в другую базу данных, которая будет использоваться для создания отчетов и для других различных целей в качестве ссылки.

У меня есть 1 БД с именем Connect, в которой текущее приложение манипулирует Персональными данными на tblPerson. У меня есть другая БД в том же физическом блоке с именем MATRIX, где новое приложение манипулирует данными. Я пытаюсь создать таблицу в MATRIX с именем tblIdentificationMap, в которой просто хранятся все различные идентификаторы, которые у нас есть, из разных приложений в доме.

Когда я включаю этот триггер и пытаюсь обновить tblPerson, я получаю следующую ошибку -> Msg 208, Level 16, State 1, Procedure tblPersonIDMap_OnUpdate, Line 15 Invalid object name 'MATRIX.dbo.tblIndentificationMap'.

Это мое утверждение ОБНОВЛЕНИЕ ->

`  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 Ответ

1 голос
/ 15 января 2010

Заменить

UPDATE MATRIX.dbo.tblIndentificationMap

с

m

в первой строке. Кроме того, в области SET вам не нужны ссылки на m (хотя я не думаю, что они приносят какой-либо вред, это усложняет обслуживание)

Ваш оператор SET сбит с толку, поскольку вы непоследовательно ссылаетесь на псевдоним и настоящее имя.

...