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