2010-12-18 62 views
0

如果我有一個表MyTable,其中有列a,b和c,它們是整數。鑑於我想根據b和c的值更新所有'a'。在多個條件下更新tsql中的表

Update MyTable set a = 2 where b = 1 and c = 1 

它來得太遲了,我不能爲我的生活爲什麼這種說法不工作,我失去了一些愚蠢的?

編輯,woops,忘記了錯誤。

「子查詢返回的值超過1,當子查詢出現在=,!=,<,< =,>,> =或子查詢用作表達式時,這是不允許的。

編輯2:這是我正在使用的確切查詢(不同的列名稱)。原來桌子上有一個觸發器壞了。我現在感覺有點傻,不過謝謝你的幫助:)

+0

你能描述爲什麼它不起作用嗎?錯誤,沒有更新,等等。 – sgriffinusa 2010-12-18 22:44:32

+0

這應該工作。我看不出爲什麼它不會 – 2010-12-18 22:45:01

+2

您的錯誤與您的代碼不符。如果可能,你應該發佈確切的SQL查詢。 – sgriffinusa 2010-12-18 22:46:35

回答

3

你發佈的聲明沒有任何問題。錯誤在別處。

你能發佈錯誤的查詢嗎?或者你也許過度簡化了它?子查詢看起來是這樣的:

UPDATE MyTable 
SET a = 2 
WHERE b = 1 AND c = (SELECT c FROM MyTable2 WHERE id = 5) 
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <--- subquery 

一個無效的查詢,可以給該錯誤消息,你可能看起來像這樣:

UPDATE MyTable 
SET a = 2 
WHERE b = 1 AND c = (SELECT c, d FROM MyTable2 WHERE id = 5) 

第二個查詢是無效的,因爲它返回兩個值,但=運算符只允許與單個值進行比較。

解決方法是確保在相等比較中使用的所有子查詢僅返回由單個列組成的單個行。