2013-07-25 56 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' 

我猜在根據您所提供的代碼,你的表結構,但是這應該是更接近你所需要的。