Обновить триггер вставки Null - PullRequest
1 голос
/ 05 июля 2010

Я пытаюсь создать триггер на SQL Server 2008. Я хочу, чтобы при обновлении поля в журнале таблиц новое поле обновлялось в другой таблице Док.Это код для триггера:

Create TRIGGER dbo.DocSt
   ON  dbo.log 
   AFTER  UPDATE
IF (SELECT COUNT(*) FROM inserted) > 0 
    BEGIN 
        IF (SELECT COUNT(*) FROM deleted) > 0 
        BEGIN 
          UPDATE [dbo].[Doc]
   SET 
      [ID_user] = (select ID_user from inserted)
 WHERE 
 IDN=  (select id_doc from inserted)
        END 
       END 

Когда я обновляю поле в таблице журнала, триггер обновляет таблицу Doc, но она вставляет NULL.Что я делаю не так?Спасибо!

1 Ответ

1 голос
/ 05 июля 2010

Этот код никогда не будет работать - что произойдет в вашей инструкции UPDATE, обновляющей 10 строк?Что дает этот выбор:

SET [ID_user] = (select ID_user from inserted)

Вы пытаетесь установить одно значение для целого возвращаемого набора из оператора SELECT - это не сработает, очевидно.

Вам нужно создать инструкцию UPDATE, которая объединяется с псевдотаблицей Inserted:

CREATE TRIGGER dbo.DocSt
   ON dbo.log AFTER UPDATE

   UPDATE [dbo].[Doc]
   FROM Inserted i
   SET [ID_user] = i.ID_User
   WHERE IDN = i.id_doc

Таким образом, для каждой записи в Inserted вы присоединяете к ней свою таблицу dbo.Docи обновите столбец ID_user.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...