2012-04-26 15 views
-1

123.4561、345.5671、121.3432、321.3452、1234.3423のようないくつかのデータは、それぞれ記事a、b、c、d、eの新しい価格として更新する必要があります。テーブル内での複数の更新

私は約1000のレコードを持っています。

テーブルのこれらの記事(すべて1000)の新しい価格(上記のような)を更新する必要があります。

1000件の更新文を書くことは忙しい作業です。私はそうするためにカーソルを使うことを考えていました。まだすべての価格を取って、その特定の価格にリンクすることはできません。 質問は、特定の商品を新しい価格とリンクして更新する方法です。

誰でも簡単な方法についてアドバイスできますか?ありがとう!

+5

新しい価格はどこですか?テーブルで?ファイル? –

+0

@David Aldridgeは実際にはファイルにあります。私はメモ帳ですべての新しい価格を持っています..あなたが想像することができます。 – prashant1988

+0

ファイルがサーバーからアクセスできる場合、または可能であれば、外部表としてアクセスし、MERGEステートメントを使用して既存のレコードを更新することができます。もしそれがあれば、新しいものも追加するだろう。 –

答えて

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

0

MERGEを使用することを検討してください。これに非常に近いが、Oracleでサポートされて

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; 

何か:

以下は、標準SQLです。共通テーブル式(CTE)をステージングベーステーブルに置き換えることができます。

関連する問題