使用表函数中的数据随机化SQL数据

时间:2011-12-20 20:23:41

标签: tsql table-functions

我尝试制作一个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

问题是,这只调用我的函数一次,并将相同的city,state和zip放入表的每一行。有没有办法为表中的每一行调用一次函数?

2 个答案:

答案 0 :(得分:1)

使用交叉申请

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

答案 1 :(得分:1)

好的,感谢我的一位同事,我们找到了解决方案。似乎由于该函数没有采用任何参数,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

有点hacky,但它奏效了。感谢Joe的帮助。