2013-05-30 52 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

這裏是錯誤:消息102,級別15,狀態1,過程trgAfterInsert,行9 '@BusinessUnit'附近的語法不正確。 – moe

+0

'select @ BusinessUnit = i。@ BusinessUnit from inserted 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

傢伙我很抱歉,我不知道這是怎麼發生的,但我現在更新了我所有的選擇語句,但仍然得到相同的錯誤。看到我的第一篇文章。謝謝 – moe