Рандомизация данных 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
Другие вопросы по тегам