SQL Server 2014 替换不同的?去识别化数据

SQL Server 2014 Replace Distinct? DeIdentify Data

我将再次解释我正在尝试做的事情,希望能对你有所帮助。

Table 1 有 4061 行,其中的列包括 [名称]、[地址 1]、[地址 2]、[地址 3]、[城市]、[州]、[邮编]、[国家]、[Phone] 和其他 20 个列。 Table1为需要去标识化的数据。 Table 1 在总共 4061 行中有 1534 行不同的 [Name] 行。

Table 2 具有包含相同列的自动生成数据。我想用 table 2 中的数据替换 table 1 中的上述列。我想 select 基于 [Name] 来自 table 一个然后 [ Name]、[Address1]、[Address2]、[Address3]、[City]、[State]、[Zip]、[Country]、[Phone] 以及来自 [=27= 的一组新的不同数据] 2.

我不想只用新地址更新每一行,因为那样会破坏数据的一致性。通过仅替换不同的,这将允许我在更改 table 1 中的行数据时保持数据一致性。完成后,我希望有 1534 个不同的新的去标识化 [Name] [Address1],[Address2 ],[Address3],[City],[State],[Zip],[Country],[Phone] in table 1 from table 2.

您将在 update 中使用 join。您可以使用 row_number():

为 1500 行生成连接键
update toupdate
    set t.address = f.address
    from (select t.*, row_number() over (order by newid()) as seqnum
          from table t
         ) toupdate join
         (select f.*, row_number() over (order by newid()) as seqnum
          fake f
         ) f
         on toupdate.seqnum = f.seqnum and t.seqnum <= 1500;

这是我最终的做法。 首先,我 运行 声明 select 不同并将其插入 table.

Select Distinct [Name],[Address1],[City],[State],[Zip],[Country],[Phone]
INTO APMAST2
FROM APMAST

然后我在 APMAST2 中添加了 name2 列,并使用一条语句在 APMAST2 中创建了一个顺序 id 字段。

DECLARE @id INT 
SET @id = 0 
UPDATE APMAST2
SET @id = id = @id + 1 
GO 

现在我在 APMAST2 中有了自己的不同信息以及一个空白名称字段和一个顺序 ID 字段。现在我可以使用我生成的假名 table 加入这个日期。 HERE 使用他们的批量工具。

使用连接语句,我将我的假数据与 APMAST2 连接起来

Update dbo.APMAST2
    SET dbo.APMAST2.Name = dbo.fakenames.company,
        dbo.APMAST2.Address1 = dbo.fakenames.streetaddress,
        dbo.APMAST2.City = dbo.fakenames.City,
        dbo.APMAST2.State = dbo.fakenames.State,
        dbo.APMAST2.Zip = dbo.fakenames.zipcode,
        dbo.APMAST2.Country = dbo.fakenames.countryfull,
        dbo.APMAST2.Phone = dbo.fakenames.telephonenumber       
        FROM 
        dbo.APMAST2
        INNER JOIN
        dbo.fakenames
        ON dbo.fakenames.number = dbo.APMAST2.id

现在我加载了假数据,但我保留了原始名称字段,因此我可以将此数据重新加载到我的完整 table ARMAST 中,所以现在我可以在 ARMAST2 和 ARMAST 之间进行连接。

Update dbo.APMAST
    SET dbo.APMAST.Name = dbo.APMAST2.Name,
        dbo.APMAST.Address1 = dbo.APMAST2.Address1,
        dbo.APMAST.City = dbo.APMAST2.City,
        dbo.APMAST.State = dbo.APMAST2.State,
        dbo.APMAST.Zip = dbo.APMAST2.Zip,
        dbo.APMAST.Country = dbo.APMAST2.Country,
        dbo.APMAST.Phone = dbo.APMAST2.Phone        
        FROM 
        dbo.APMAST
        INNER JOIN
        dbo.apmast2
        ON dbo.apmast.name = dbo.APMAST2.name2

现在,我的原始 table 中包含所有虚假数据,但它保持了原有的完整性,大部分都是如此,因此数据在报告时看起来不错,但已取消识别。如果以后需要将其与其他数据匹配,您现在可以删除 APMAST2 或保留它。我知道这很长,我相信有更好的方法来做到这一点,但我就是这样做的,欢迎提出建议。