2013-05-30 4 views
1

Я пытаюсь создать функцию триггера после того, как элементы вставлены в таблицу, но я получаю синтаксическую ошибку и не уверен, что происходит. Кто-то может помочь? Вот мой синтаксис:Проблема с функцией триггера в sql

GO 
CREATE TRIGGER trgAfterInsert ON [DR].[dbo].[Derived_Values] 
FOR INSERT 
AS 
    declare @BusinessUnit varchar(75); 
    declare @Questions varchar(max); 
    declare @Answer nchar(10); 


    select @[email protected] from inserted i; 
select @[email protected] from inserted i; 
select @[email protected] from inserted i; 


    insert into [Main].[dbo].[Derived_Values_Test] 
      (BusinessUnit,Questions, Answer) 
    values(@BusinessUnit,@Questions, @Answer); 

    PRINT 'AFTER INSERT trigger fired.' 
GO 
+0

Какое сообщение об ошибке? – Taryn

+0

вот ошибка: Msg 102, уровень 15, состояние 1, процедура trgAfterInsert, строка 9 Неверный синтаксис рядом с '@BusinessUnit'. – moe

+0

'select @ BusinessUnit = i. @ BusinessUnit из вставленного i;' Действительно ли ваш столбец называется '@ BusinessUnit'? –

ответ

8

Попробуйте это:

CREATE TRIGGER trgAfterInsert ON [DR].[dbo].[Derived_Values] 
FOR INSERT 
AS 
    insert into [Main].[dbo].[Derived_Values_Test] 
      (BusinessUnit,Questions, Answer) 
    SELECT BusinessUnit,Questions, Answer 
    FROM inserted; 

    PRINT 'AFTER INSERT trigger fired.' 

Никогда не писать триггеры, как ваша, которая эффективно принимает на себя будет только одна строка обновлено. Триггеры должны использовать основанную на множестве логику.

+0

thnx, я пробовал ваш метод, и я не получал никаких ошибок при запуске, но он не создавал триггер в этой базе данных. Нужно ли сначала объявлять переменные, или это все, что мне нужно. не знаю, почему он не создал триггер. – moe

+0

Вам вообще не нужны переменные. Триггер создается в базе данных, где вы запускаете оператор CREATE TRIGGER. – sqlvogel

+0

спасибо. Я вставляю данные в таблицу, которая является удаленным сервером, поэтому, когда я запускаю ее, я получаю эту ошибку ». Менеджер транзакций партнеров отключил поддержку удаленных/сетевых транзакций.». Знаете ли вы, что мне нужно сделать, чтобы это решить? спасибо – moe

0

@Answer объявлена ​​как строка, а не таблицы. Так что это не сработает:

select @[email protected] from @Answer i; 

Должно ли это быть inserted?

select @[email protected] from inserted i; 

Кроме того, вы, по всей видимости, использует переменные для имен столбцов:

select @BusinessUnit=i.BusinessUnit from inserted i; 
select @Questions=i.Questions from inserted i; 
select @Answer=i.Answerfrom inserted i; 
+0

ребята, извините, я не знаю, как это произошло, но я обновил теперь все мои предложения select, но все равно получаю ту же ошибку. см. мой первоначальный пост. спасибо – moe

Смежные вопросы