0

質問を投稿するのはかなり新しいので、サポートに感謝します。table を更新する proc を書きたかったのtestAdです。

置換関数で実行できますが、更新するレコードがほぼ 100 万あり、ストアド プロシージャを使用しようとしています。

私が始めたことを見てもらえますか?ありがとうございます。今日一日の終わりまでに何かを思いつくはずです..一種の厳しい状況です. 以下のものを試してみましたが、うまくいかないようです。

CREATE PROC [dbo].[testAd]
AS
DECLARE @ci  VARCHAR (255)
UPDATE Stage.TestAdd
SET @ci=AddressOne
SET @ci= CASE @ci
 WHEN 'Des Moines'  THEN 'IA' 
 WHEN 'Seattle'    THEN 'WA'
 WHEN 'Pheonix'    THEN 'Az'   
 WHEN 'Phx'   THEN 'Az'
 .
 . 
 ELSE @ci

終わり

4

1 に答える 1

0

私の理解が正しければ、1 つのフィールドに格納されている値を [city] から一致する [state] に更新する必要があります。

長い case ステートメントを使用する代わりに、有効なペアを持つテーブル変数を使用してから、更新でそのテーブルと結合できます

ここのようなもの:

declare @cityInState as table(city varchar(50), state char(2))
insert into @cityInState 
values
    ('Des Moines','IA') 
    ,('Seattle', 'WA')
    ,('Pheonix','Az')   
    ,('Phx','Az')
    -- etc ...

update yt
set 
    fieldToUpdate = cis.state
from 
    yourTable yt
    inner join @cityInState cit on yt.fieldToUpdate = cit.city 

警告: これは都市の値を州に置き換えるため、それが必要な場合にのみ実行してください。

更新後に都市情報 が失われるため、これを追加のフィールド (理想的にはルックアップ テーブルへの参照) として追加することをお勧めします。

于 2012-09-21T15:33:46.620 に答える