2013-07-25 37 views
1

我有一个名为test的表和名为trigg的另一个表.....我想要的是......只要数据有'name'作为'拉克什”被插入到测试...它应该引发触发器插入年龄在‘崔格’表....我想在sql server中做出条件触发器......

我想通过我自己.... CHK它...

create trigger trigger1 
on test 
after insert 
as 
if((select name from test) like 'rakesh') 
begin 
insert into trigg(age) 
select name from test 
end 

但它没有工作.. 每当我在测试我将..getting此错误:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 

帮我....

回答

1
  • 您从测试选择时,你应该从可以选择INSERTED。您希望您的语句根据插入的内容生效,而不是基于表中可能包含的内容。

  • 即使在更改之后,触发器每个语句触发一次,而不是每行触发一次。如果插入操作影响多行,那么伪指令将包含多行,因此子选择会失败。

建议修订:

create trigger trigger1 
on test 
after insert 
as 
if EXISTS (select * from INSERTED where name like 'rakesh') 
begin 
    insert into trigg(age) 
    select name from INSERTED 
    where name like 'rakesh' 
end 
0

没有看到你的扳机,我猜你所做的一次只有一个记录在触发器被处理不正确的assumtion,因此,你想设置一些scalear变量字段的值在插入或类似这样的删除:

set @test = (select id from inserted) 

你必须与假设写触发会有muilitple记录porce一次过去了。这是集合论而不是逐行处理。

另一种可能性是,您正在使用的动作查询中有一些子查询,并且确实返回了多条记录。

另一种可能性是trigg表在它上面写的查询很差,这就是导致你的错误的原因。

0

大约是这样的内容:

CREATE TRIGGER trigger1 
ON test AFTER insert AS 

INSERT INTO trigg (age) 
SELECT name FROM INSERTED 
WHERE name like 'rakesh' 

我猜在根据您所提供的代码,你的表结构,但是这应该是更接近你所需要的。