Рандомизация данных SQL с данными из табличной функции - PullRequest
2 голосов
/ 21 декабря 2011

Я пытаюсь создать сценарий sql, который будет рандомизировать город, штат и почтовый индекс таблицы "members".Я сделал табличную функцию, которая возвращает одну строку со столбцами «город», «штат» и «почтовый индекс», взятых из другой базы данных в произвольном порядке (через представление).Это гарантирует, что я получу город, штат и почтовый индекс, которые фактически соотносятся друг с другом в реальном мире.

Оттуда я пытаюсь сделать что-то вроде этого:

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

Проблемато есть, это вызывает мою функцию только один раз, и помещает один и тот же город, штат и почтовый индекс в каждую строку таблицы.Есть ли способ вызвать мою функцию один раз для каждой строки в таблице?

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Хорошо, так что, благодаря одному из моих сотрудников, мы нашли решение.Казалось бы, поскольку функция не принимала никаких параметров, SQL Server решил, что результат никогда не изменится.Таким образом, мы обманули сервер, думая, что он будет отличаться каждый раз, передав параметр в функцию, которая отличалась: идентификатор каждой строки.Так как мы каждый раз передавали разные параметры, она вызывала функцию для каждой строки.

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

Хинда, но это сработало.Спасибо Джо за помощь.

1 голос
/ 21 декабря 2011

Используйте CROSS APPLY

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...