我有一個臨時表,其中包含多個不同的客戶記錄,如果它們具有相同的電子郵件地址,我想要更新同一列中的所有行:SQL Server - 在UPDATE語句中加入
CustomerID | Email | Pref1 | Pref2 | Pref3
-----------------------------------------------------
1234 [email protected] 1 0 0
1235 [email protected] 1 1 0
1236 [email protected] 0 0 1
1237 [email protected] 0 0 0
1238 [email protected] 1 0 0
應該改爲:
CustomerID | Email | Pref1 | Pref2 | Pref3
-----------------------------------------------------
1234 [email protected] 1 1 1
1235 [email protected] 1 1 1
1236 [email protected] 1 1 1
1237 [email protected] 1 0 0
1238 [email protected] 1 0 0
目前,我有一個while循環(循環比那些尚未更新的行),包含一個內部光標遍歷我想更新的列(PREF1 ,Pref2,Pref3等)。這是有效的,但是會在更大的記錄集上永久存在。
我如何修改如下:
UPDATE #table
SET Pref1 =
(
SELECT MAX(IsNull(Pref1,0))
FROM #table
WHERE Email = '[email protected]'
)
WHERE Email = '[email protected]'
,這樣,而不是傳遞每一個電子郵件地址,在某種程度上是指它的更新記錄的電子郵件地址?
UPDATE #table
SET Pref1 =
(
SELECT MAX(IsNull(Pref1,0))
FROM #table
WHERE Email = #table.email
)
(上面的查詢不起作用,它只是更新了所有記錄的是整列1,如果該列存在)。我應該使用某種更新連接嗎?
完美,正是我一直在尋找。謝謝! – TheTor 2012-02-29 10:42:22