2

「メンバー」テーブルの都市、州、および郵便番号をランダム化するSQLスクリプトを作成しようとしています。別のデータベースからランダムに(ビューを介して)取得した「city」、「state」、「zip」の列を持つ単一の行を返すテーブル関数を作成しました。これにより、現実の世界で実際に相互に関連する都市、州、および郵便番号を確実に取得できます。

そこから私はこのようなことをしようとしています:

update t
set 
t.City = citystate.city,
t.State = citystate.state,
t.PostalCode = citystate.zip

from
(select
 City, 
 State,
 PostalCode from DATABASE.dbo.Member) t,
 DATABASE.dbo.getRandomCityState() citystate

問題は、これは私の関数を1回だけ呼び出し、同じ都市、州、およびzipをテーブルのすべての行に配置することです。テーブルのすべての行に対して1回関数を呼び出す方法はありますか?

4

2 に答える 2

1

CROSSAPPLYを使用する

update t
set 
t.City = citystate.city,
t.State = citystate.state,
t.PostalCode = citystate.zip

from
(select
 City, 
 State,
 PostalCode from DATABASE.dbo.Member) t
 CROSS APPLY
 DATABASE.dbo.getRandomCityState() citystate
于 2011-12-20T20:26:08.750 に答える
1

さて、私の同僚の1人のおかげで、解決策を見つけました。関数はパラメーターを受け取らないため、SQLServerは結果が変更されないことを決定したように見えます。そこで、サーバーをだまして、異なる関数にパラメーターを渡すことで、毎回異なると考えさせました。つまり、各行のIDです。毎回異なるパラメーターを渡すため、行ごとに関数が呼び出されました。

update t 
set 
t.City = citystate.city,
t.State = citystate.state,
t.PostalCode = citystate.zip

from
(select top 10 
City, 
 State,
 PostalCode from TrajectoryServicesTest.dbo.Member) t
 cross apply SanitizePhi.dbo.getRandomCityState(t.MemberID) citystate

ちょっとハッキーですが、うまくいきました。助けてくれたジョーに感謝します。

于 2011-12-20T21:08:10.900 に答える