На основе ответа Mitch Wheats, связанного с этой статьей о данных скремблирования вы можете сделать что-то подобное, чтобы перемешать несколько полей, вы не ограничены только идентификаторами:
;WITH Randomize AS
(
SELECT ROW_NUMBER() OVER (ORDER BY [UserID]) AS orig_rownum,
ROW_NUMBER() OVER (ORDER BY NewId()) AS new_rownum,
*
FROM [UserTable]
)
UPDATE T1
SET [UserID] = T2.[UserID]
,[FirstName] = T2.[FirstName]
,[LastName] = T2.[LastName]
,[AddressLine1] = T2.[AddressLine1]
,[AddressLine2] = T2.[AddressLine2]
,[AddressLine3] = T2.[AddressLine3]
,[City] = T2.[City]
,[State] = T2.[State]
,[Pincode] = T2.[Pincode]
,[PhoneNumber] = T2.[PhoneNumber]
,[MobileNumber] = T2.[MobileNumber]
,[Email] = T2.[Email]
,[Status] = T2.[Status]
FROM Randomize T1
join Randomize T2 on T1.orig_rownum = T2.new_rownum
;
Таким образом, вы не ограничены только этим, как показано в статье:
;WITH Randomize AS
(
SELECT ROW_NUMBER() OVER (ORDER BY Id) AS orig_rownum,
ROW_NUMBER() OVER (ORDER BY NewId()) AS new_rownum,
*
FROM [MyTable]
)
UPDATE T1 SET Id = T2.Id
FROM Randomize T1
join Randomize T2 on T1.orig_rownum = T2.new_rownum
;
Опасность для этого подхода - количество данных, которые вы настраиваете.Использование CTE помещает все эти вещи в память, поэтому пока я обнаружил, что это довольно быстро (19 секунд для таблицы строк по 500 КБ).Вы будете осторожны, если у вас есть таблица с миллионами записей.Вы должны учитывать, сколько данных на самом деле необходимо или является хорошей выборкой для тестирования и разработки.