2014-04-30 39 views
0

我試圖更新一列上的多個行(SQL Server 2008)。我需要更新的列有插入和更新觸發器。當我運行此腳本我得到一個錯誤信息:如何更新列的所有行

UPDATE htable 
    SET Isverified=1 
    WHERE columnname IN ('122','566','652') 

錯誤:

Msg 512, Level 16, State 1, Procedure mydatabasename, Line 22
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

我不知道如何真正的這是,但我願意相信是由於觸發定義此列。沒有任何想知道我怎麼能做到這一點
這裏是觸發:

ALTER TRIGGER [dbo].[sendTodbase] 
ON [dbo].[htable] 
AFTER UPDATE 
AS 
BEGIN DISTRIBUTED TRANSACTION 
SET NOCOUNT ON 
--CHECK IF DATAENTRY COLUMN IS UPDATED 
IF UPDATE(Isverified) begin 
declare @dEVer bit declare @rcNum varchar(50) 
declare @idenNum varchar(50) declare @docId bigint 

--GET INSERTED VALUE AND CHECK IF IT's (YES) THEN CONTINUE... 
select @dEVer = (select Isverified from inserted i) 
if @dEVer = 1 begin 
--END CHECK, IF DE IS COMPLETED CONTINUE---- 

COMMIT TRAN 
+3

您缺少一個'set'子句(它將指定您想要更改哪個列和哪個值) –

+0

此外,您的錯誤消息不會引用您發佈的查詢。 – Mihai

+0

@a_horse_with_no_name我發佈了完整的錯誤消息 – kombo

回答

2

異常可能是由產生期望select Isverified from inserted i子查詢返回不超過一行。

您的update查詢會發出多個行,並會生成異常Subquery returned more than 1 value

0

嘗試這樣:

select @dEVer = (select Isverified from inserted i) 

TSQL解釋:

Update mydatble set ColumnName = <Require value> 
where columnname in ('122','566','652')