2012-04-26 50 views
-1

我有一些數據,如某些價格123.4561,345.5671,121.3432,321.3452,1234.3423,它們需要分別更新爲物品a,b,c,d,e的新價格。表中的多個更新

我有大約1000個這樣的記錄。

我需要在表中更新這些文章(全部1000)的新價格(如上)。

編寫1000條更新語句將是一件繁忙的工作。我正在考慮用光標來做。仍然無法獲得所有價格並將它們連接到特定的價格。 問題是如何將特定文章與其新價格鏈接並更新它。

任何人都可以請建議任何更簡單的方法?謝謝!

+5

新價格在哪裏?在桌子上?一份文件? – 2012-04-26 19:08:55

+0

@David Aldridge在一個文件中。我有記事本中的所有新價格..你可以假設。 – prashant1988 2012-04-27 05:17:56

+0

如果服務器可以訪問該文件,或者可以訪問該文件,則可以將其作爲外部表訪問並使用MERGE語句更新現有記錄。如果有的話,這也會增加新的。 – 2012-04-27 11:17:28

回答

1

是什麼格式或數據?如果你的記事本有一個像

art1,price1 
art2,price2 
art3,price3 

線,你可以將此信息導入到數據庫中的表(最好在你的情況是使用SQL開發,蟾蜍進口OPTIO,或者任何你使用IDE),

,然後發出一個更新:

update table_articles a 
set price = (select price from import_table where price = a.price); 
1

你可以做

UPDATE table1 SET price = 
CASE articles 
WHEN 'a' THEN 123.4561 
WHEN 'b' THEN 345.5671 
... 
END 
WHERE articles IN ('a','b',....) 
+0

我已經有了這個事情..我正在尋找一種方法來應用一些循環,並分別爲文章更新價格。有什麼辦法嗎? – prashant1988 2012-04-27 05:20:13

0

考慮使用MERGE

下面是標準的SQL:

WITH source 
    AS 
    (
     SELECT * 
     FROM (
       VALUES ('a' , 123.4561), 
        ('b' , 345.5671), 
        ('c' , 121.3432), 
        ('d' , 321.3452), 
        ('e' , 1234.3423) 
      ) AS T (articles , price) 
    ) 
MERGE INTO YourTable 
    USING source 
     ON source.articles = YourTable.articles 
WHEN MATCHED THEN 
    UPDATE 
     SET price = source.price; 

東西非常接近,這是Oracle支持。請注意,公用表表達式(CTE)可能會被替換爲一個暫存基表。