2016-09-28 103 views
-2

我想運行更新查詢,似乎很簡單我已更新所有字段InitialCharge值'21 .61'無處不在當前InitialCharge = '20 .72',我也有其他合格的領域。我得到的錯誤:在TSQL拋出錯誤更新查詢

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

這裏是我的查詢,我試圖用「IN」和「存在」,但既不工作:

update [dbo].[tTransactionHistory] 
    set InitialCharge = '21.61' 
    Where exists( 

         select InitialCharge from [dbo].[tTransactionHistory] 
         where ProcedureID = '-747422922' and InitialCharge = ('20.72') and (DateOfService >= '09/01/2014' and DateOfService < '10/01/2014') 

         ) 

我甚至嘗試一個簡單的更新查詢,我得到的誤差,我從來沒有遇到這樣的問題,試圖只更新幾個領域

update [dbo].[tTransactionHistory] 
    set InitialCharge = '21.61' 
    where InitialCharge = '20.72' 

Error Screen Shot

+1

你需要查詢相關,如果你使用的是存在 – TheGameiswar

+0

我試着只是做了直線上升的更新以及使用不存在,或並得到該錯誤 –

+0

您能否在這裏解釋邏輯?哪些記錄需要更新? – JohnHC

回答

0

我明白爲什麼你需要一個子查詢存在於所有的迷茫......

UPDATE [dbo].[tTransactionHistory] 
SET InitialCharge = '21.61' 
WHERE 
    ProcedureID = '-747422922' AND 
    InitialCharge = '20.72' AND 
    (DateOfService >= '2014/09/01' and DateOfService < '2014/10/01') 

,並確定該表中的列是字符串?

+0

我試過因爲我得到的錯誤,我GOOGLE了它,有人建議它。我的查詢也出現同樣的錯誤。 –

+0

所以當我讀錯誤它說你不能更新時,子查詢返回多個記錄?我從未見過這個錯誤。 –

+0

當沒有子查詢時,你怎麼能得到相同的「子查詢返回超過1個值...」的錯誤。最好的解決方案可能是一個很好的午睡;) – Mark

0

你有不要將您的查詢固定到特定的行。

嘗試

UPDATE T1 
SET InitialCharge = '21.61' 
FROM tTransactionHistory T1 
WHERE ProcedureID = '-747422922' 
AND EXISTS (
    SELECT InitialCharge 
    FROM tTransactionHistory T2 
    WHERE T2.ProcedureID = T1.ProcedureID -- This links the EXISTS to the update 
    AND DateOfService BETWEEN '09/01/2014' AND '10/01/2014' 
    AND InitialCharge = '20.72') 

如果這不是正是你要找的人,我希望你得到的總體思路。

+0

我得到這個查詢相同的錯誤 –

0

的問題是在桌子上的觸發器,它不是查詢:(