2011-12-20 3 views
2

"members"テーブルの都市、州、および郵便番号をランダム化するSQLスクリプトを作成しようとしています。私はの単列を返すテーブル関数を作成しました。 "city"、 "state"、 "zip"という列は別のデータベースからランダムに(ビューを介して)取ります。これにより、現実世界でお互いに実際に相関する都市、州、およびジップを得ることができます。私はこのような何かやろうとしています。そこからSQLデータをテーブル関数のデータでランダム化

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 

問題があるが、これは一度だけ、私の関数を呼び出すと、同じ都市を置き、状態、およびテーブルのすべての行に圧縮します。テーブルのすべての行に対して一度関数を呼び出す方法はありますか?

+0

盲目的にまともな質問をしているのは誰ですか? (+1すると+1になります) –

答えて

1

を適用CROSSを使用してください。関数がパラメータを取らなかったため、SQL Serverは結果が決して変わらないと判断しました。だから私たちは、サーバーが違う関数にパラメーターを渡すことで毎回異なると思うようにサーバーを騙しました。つまり、各行の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 

キンダーハッキーですが、うまくいきました。助けてくれたJoeに感謝します。

+0

非管理機能と非管理機能を見てください。非解体機能が必要です。 tsqlでは、CURRENT_TIMESTAMPやRANDのような非解体関数への関数呼び出しを含めることで、ユーザー定義関数を非解体に強制することができます。 http://msdn.microsoft.com/en-us/library/ms178091.aspx –

+0

これは素晴らしいアイデアです。ちょうどメモ、あなたはスカラー値の関数からRANDを呼び出すことはできません。私は一日中それを扱ってきました。私たちが使い終わった解決策は、RAND呼び出しをビューに入れていたことです。 – mtmurdock

1

は、私の同僚の1のおかげで、我々は解決策を見つけたので、[OK]を

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 
+0

うまくいかない。私はちょうどそれを実行し、すべての行に同じ値を入れました。 – mtmurdock

関連する問題