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

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

4

2 回答 2

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
于 2011-12-20T20:26:08.750 回答
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,但它有效。感谢乔的帮助。

于 2011-12-20T21:08:10.900 回答