我正在编写一个脚本来匿名化包含患者数据的表格。 我生成了一个包含 50,000 行匿名数据的表。
我需要用生成表中的数据更新患者表中的一些列。
当然,我已经阅读了有关更新表格以及如何从另一个表格中选择随机行的内容。我想不通的是如何将其合并到一个查询中。
我已经将 CTE 视为一种可能的解决方案,但我不明白它是如何工作的。我遇到的主要问题之一是生成的表中没有任何键,即使它有它也不应该是相关的,因为我只想迭代患者表的所有行,用随机行更新它的值来自生成的表。
我有以下内容:
Update Patients
Set Patients.pat_FirstName = fn.GivenName,
pat_LastName = fn.SurName,
pat_StreetName = fn.StreetAddress,
pat_PostalCode = fn.ZipCode,
pat_City = fn.City,
pat_DateOfBirth = fn.BirthDay,
from
( Select Top 1,
GivenName,
SurName,
StreetAddress,
ZipCode,
City,
Birthday
from FakeNameGenerator tablesample(1000 rows)) as fn
但这只会执行一次“随机”,用相同的值填充患者表中的每一行。就像我之前说的,它可以(应该是??)用 CTE(理货?)表来解决,但是如何解决?
我即将掌握 C# 并编写该死的代码...
最佳答案
另一种方法是将连续的数字列添加到 FakeNameGenerator
表
ALTER TABLE FakeNameGenerator ADD ID INT NOT NULL IDENTITY(1,1)
CREATE UNIQUE NONCLUSTERED INDEX ix ON FakeNameGenerator(ID)
那么就变成了生成一个1到50000之间的随机数的问题
UPDATE P
SET P.pat_FirstName = F.GivenName /*...*/
FROM Patients P
INNER LOOP JOIN FakeNameGenerator F ON F.ID = (1 + ABS(CRYPT_GEN_RANDOM(8)%50000))
INNER LOOP JOIN
提示强制执行以 Patients
作为驱动表的嵌套循环连接。它在 FakeNameGenerator
中寻找每一行,重新评估要寻找的 ID
。
关于sql - 使用来自另一个表的随机值更新 SQL 表(无连接条件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14725355/