2012-04-26 83 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)可能会被替换为一个暂存基表。