2012-10-11 41 views
2

可能重複:
Is it possible to perform multiple updates with a single UPDATE SQL statement?如何更新與唯一值的表中的列,但不是所有的行,不增加

我更新一個表,一些新的價值觀對於如下的特定列,所以我正在更新表Prepay,列PrepayTransactionDesc,在某些行前綴表示的預付款Id

update Prepay 
set PrepayTransactionDesc = 'Funded Repeat Voucher 153429' 
where prepayId = 58045 

它工作正常,但我想要做多個更新。 我嘗試了幾種不同的方法,但失敗了。當時我正在嘗試使用CASE。

例如,我有以下prepayid和prepaytransactiondesc領域

57770 Funded Repeat Voucher 153118 
57771 Funded Repeat Voucher 153119 
57772 Funded Repeat Voucher 153120 
57773 Funded Repeat Voucher 153121 
57774 Funded Repeat Voucher 153122 
57775 Funded Repeat Voucher 153123 
57776 Funded Repeat Voucher 153124 
57894 Funded Repeat Voucher 153276 
57895 Funded Repeat Voucher 153277 
57896 Funded Repeat Voucher 153278 

我會怎麼做他們1走?它不是那麼困難,但當我嘗試完成任務時,我似乎錯過了一些東西。

+0

你能解釋一下你想幹什麼?你如何確定每個更新的值? – Gidil

+0

你是什麼意思1更新它們呢? –

+0

您如何將prepayId與優惠券編號聯繫起來? –

回答

1

你可以嘗試

UPDATE Prepay 
SET PrepayTransactionDesc = 
    CASE 
    WHEN prepayID = 57770 THEN 'Funded Repeat Voucher 153118' 
    WHEN prepayID = 57771 THEN 'Funded Repeat Voucher 153119' 
    WHEN prepayID = nextID THEN 'Next Value' 
    END 
WHERE prepayID in (1,2,4,57770... all your ids here) 
+0

你可以嘗試,但它不需要做什麼 – NimChimpsky

+0

那麼我不明白這個問題。向我解釋,而不是降低投票。我來幫忙 – Marc

+0

我想每個prepayId都會有不同的PrepayTransactionDesc –

0

把你的數據更新到一個臨時變量表​​。然後,將其與您想要在更新語句的FROM子句中更新的表聯接。這將允許您在一個語句中更新多行。

DECLARE @data TABLE (id INT, desc VARCHAR(200)) 
INSERT @data VALUES (57770, 'Funded Repeat Voucher 153118') 
INSERT @data VALUES (57771, 'Funded Repeat Voucher 153119') 

UPDATE Prepay 
SET PrepayTransactionDesc = @data.desc 
FROM Prepay 
    INNER JOIN @data ON Prepay.prepayID = @data.id 
+0

這個工程,它完全是一次性的解決方案。考慮如果您想再次使用您的代碼來獲取全新的一組ID /描述值。你必須編寫一套全新的插入/更新語句,並且你有額外的開銷創建臨時表。 – NimChimpsky

+0

臨時表可以編程方式構建或作爲變量傳遞給存儲過程。 – Rob

+0

我會指出,所有的編程都必須將數據放入某種結構化的容器中才能使用它。你永遠不能避免將這些數據對放入某種集合中。由於我們使用的是SQL,所以表是明顯的選擇,因爲進入此語句的數據(id/description對的行)是一個表。 – Rob

0
update Prepay 
    set PrepayTransactionDesc = 
    case 
     when prepayId = 58045 then 'Funded Repeat Voucher 153429' 
     when prepayId = 57770 then 'Funded Repeat Voucher 153118' 
    end 
where 
    prepayId in (58045 , 57770) 

顯然添加其他值

+0

-1是什麼原因? – NimChimpsky

+0

再試一遍,這和我試過的很相似,但我在錯誤的地方結束了! – user1738096

+0

它工作嗎? Plz給我們一個反饋 – Marc

0
Update Prepay SET PrepayTransactionDesc = 'Funded Repeat Voucher 153429' WHERE prepayID BETWEEN yourid AND yourid 
相關問題