2013-03-21 28 views
0

我想在一個INSERT語句插入多條記錄那個時候我在我的觸發得到錯誤如果在一個刀片插入多個記錄如何使用inserttrigger聲明

誤差

Msg 512, Level 16, State 1, Procedure SetIntFlag, Line 7 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated.

下了扳機是

declare @act char(16)if update (first_nm) 
set @act = (select acct_no from inserted) 
update Client set Phn9_int = 1 where acct_no = @act 

如果多個列正在插入其顯示錯誤,則將其分配給一個變量。

回答

2

假設是整個觸發:

update Client set Phn9_int = 1 where acct_no in (
    select acct_no from inserted) 

基本上,我的經驗法則是,如果你在觸發器看到任何標量,它可能相對於多行操作打破。例外是如果它使用遊標,但遊標可以避免通常。在插入,並用它

0

聲明遊標,代碼應類似於吼叫:

DECLARE @act char(16) 
DECLARE my_Cursor CURSOR FAST_FORWARD FOR SELECT acct_no FROM INSERTED; 

OPEN my_Cursor 
FETCH NEXT FROM my_Cursor into @act 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    UPDATE Client SET Phn9_int = 1 where acct_no = @act 
    FETCH NEXT FROM my_Cursor into @act 
END 

CLOSE my_Cursor 
DEALLOCATE my_Cursor 
0

不要使用local_variable作爲條件WHERE子句。相反,使用簡單的JOIN條件

if update (first_nm) 
update c 
set c.Phn9_int = 1 
FROM Client c JOIN inserted i ON c.acct_no = i.acct_no