Обновление триггера в SQL Server 2008 - PullRequest
1 голос
/ 01 июня 2011

Я новичок в SQL Server

Мне нужно создать триггер для обновления

CREATE TRIGGER on_update
ON [GP].[dbo].[TABLE1]
AFTER UPDATE
AS 

DECLARE @PKCOL1 int 
DECLARE @COL2 int
DECLARE @COL3 nvarchar(36) 
DECLARE @COL4 nvarchar(36)
DECLARE @COL5 nvarchar(126) 
DECLARE @COL6 datetime 
DECLARE @COL7 datetime

BEGIN
SELECT     @PKCOL1     = [COL-A],
       @COL2       = [COL-B],
       @COl3       =  NULL, 
       @COL4       = [COL-C],       
       @COL5       = [COL-D],
       @COL6       = [COL-E]    

FROM INSERTED 

   UPDATE [dbo].[TABLE2] 
   SET [COL2]            =  @COL2,
       [COL3]            =  @COL3,
       [COL4]            =   @COL4,
       [COL5]            =   @COL5


   WHERE COL2 = @PKCOL1

Я получаю синтаксическую ошибку для, где выражение.

Неверный синтаксис рядом с @ PKCOL1.

Может ли кто-нибудь помочь мне, пожалуйста ...

1 Ответ

4 голосов
/ 01 июня 2011

Во-первых, ответ, вероятно, потому что у вас НАЧАЛО без соответствующего оператора END.

Во-вторых, и это гораздо важнее - ваш триггер предполагает, что за один раз будет обновлена ​​только одна строка. Триггеры срабатывают только один раз за операцию и могут обновлять много строк (то есть таблица INSERTED имеет несколько строк). В вашем коде вы извлекаете только одну строку из INSERTED и обновляете TABLE2 значениями из этой строки. Вам бы лучше сделать что-то вроде:

UPDATE Table2 SET 
    [Col2] = i.[Col-B]
  , [Col3] = NULL
  , [Col4] = i.[Col-C]
  , [Col5] = i.[Col-D]
FROM Table2
JOIN INSERTED i ON Table2.Col2 = i.[Col-A]

(Предупреждение о непроверенном коде)

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