2016-11-11 5 views
1

intのリストと文字列のリストをc#に格納します。intは主キー、stringはnameです。 EXについてoracleで異なるwhereを持つ複数の行を更新する方法

:{1,2}、{ "拳"、 "第二"}

update table set name ="first" where id =1 
update table set name = "second" where id=2 

Iは、手順を使用してOracleの値を更新する必要があります。

updateName

PROCEDUREをVARCHARに配列として渡されたリストで、次のように私は手順があると(VARCHAR、IN
ID、VARCHAR
、IN
名前)

ENDのupdatenameをBEGIN です。

私は

+0

何が問題ですか?あなたはads.netのアップデート方法を知っていませんか? –

+0

私は一括手続きで一括更新を行う必要があります –

+0

これは簡単なSQL文です。 (しかし、それは私が慣れていないado.netで行われます) – mathguy

答えて

1

OK case文を使用せずに暗示すべきであるロジックがあるので、おそらくあなたは(名前が「表」で良いとは限りません!)テーブルを持っているどのような - のは、少なくとも2つの列と、それはTBLと呼ばれていますと言ってみましょう、IDと名前。また、IDと名前の列(または他の列の名前)を持つ辞書があります。

merge into tbl 
    using dictionary 
    on (tbl.id = dictionary.id) 
when matched then 
    update set name = dictionary.name 
; 

あなたはまたupdateステートメントを使用することができますが、更新は、別のテーブルから読み込むときmergeが容易で読んで維持するために、そして時にはそれはまた、より多くのことがあります -

その後merge文を使用して、効率的。

+1

ほとんどの辞書が 'C#'リスト –

+0

@JuanCarlosOropezaであると確信しています - そして、OP(またはado.netとC#からOracleに精通している人)は、C#リストをビューや一時テーブルとして "見る" 。 – mathguy

+0

@NicholasKrasnov - もちろん、それは私が書くことを意味する**です。今すぐ修正する。 – mathguy

0

標準SQLの方法は次のようになります。

UPDATE table 
SET name = 
    CASE WHEN id=1 THEN "first" 
    CASE WHEN id=2 THEN "second" 
    END 
WHERE id IN (1,2) 

別のオプションは、一時テーブルを作成し、キーと値のペアのすべてを挿入し、UPDATE文でJOINを行うことであろう。

+2

辞書に800個の項目がある場合、これには時間がかかります。 – mathguy

+0

@mathguyコンピュータ用ではありません:) –

+0

ああ - コンピュータがコードを生成するなら、私は同意します。 :-) – mathguy

関連する問題