2012-09-06 50 views
3

我有一個表Person包含一個列isStaff(位),它允許NULL值。更新一列,它爲NULL

目的是該字段必須包含值0/1;但是,由於首先缺少用戶輸入的應用程序處理,因此該列中有多個具有NULL值的記錄。

如果我試圖執行這個查詢:

UPDATE Person 
SET isStaff = 0 
WHERE isStaff IS NULL 

我得到的錯誤:

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

不知道如何解決這個問題呢?

+9

這是你運行的實際查詢嗎?這裏沒有子查詢。 –

+8

我想知道'Person'表是否有某種醜陋的觸發器,它對整個'inserted'表進行相等的比較。 – LittleBobbyTables

+0

剛剛測試過這一點,這絕對是原因。 「Person」表上有哪些觸發器? – Ghost

回答

5

如果這就是您的查詢完全一樣的發佈,那麼我傾向於相信您在Person表中沒有意識到觸發器。

我也傾向於認爲它做的線沿線的東西:

UPDATE SomeOtherTable 
SET SomeColumn = 1 
WHERE SomeOtherTable.ID = inserted.ID 

隨着觸發,inserted表包含所有記錄更新,而不僅僅是一個單一的記錄,你會想要的東西像這樣:

UPDATE SomeOtherTable 
SET SomeColumn = 1 
WHERE ID IN (SELECT ID FROM inserted) 

當然,這一切都是投機,直到你可以確認是否有在桌子上的觸發器,如果​​有,是什麼觸發甚至做。

+0

或者他們正在將該值設置爲標量變量! – HLGEM

+0

是的,這是一個同樣糟糕的可能性 – LittleBobbyTables

+0

是的! LittleBobbyTables,你很神祕,我完全忘了檢查表是否有一些觸發器。在此操作之前我禁用觸發器時,一切都很好。非常感謝!!!! – user1653059