Рандомизация данных SQL с данными из табличной функции
Я пытаюсь сделать сценарий 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
Проблема в том, что это вызывает мою функцию только один раз и помещает один и тот же город, штат и почтовый индекс в каждую строку таблицы. Есть ли способ вызвать мою функцию один раз для каждой строки в таблице?
2 ответа
Итак, благодаря одному из моих сотрудников, мы нашли решение. Казалось бы, поскольку функция не принимала никаких параметров, 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
Вроде хак, но это сработало. Спасибо Джо за помощь.
Используйте 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