如何在SQL中匿名化数据?

时间:2019-06-18 08:27:56

标签: sql sql-server sql-server-2016 data-masking

我需要匿名化SQL数据(VAR NAME = "ArId")中的变量。

变量包含10 numbers + 1 letter + 2 numbers。我需要将前10个数字随机化,然后保留字母+后两个数字。

我已经尝试过rand()函数,但这会将整个值随机化。

SELECT TOP 1000 *
FROM [XXXXXXXXXXX].[XXXXXXXXXX].[XXXXX.TEST]

我只加载了数据。

编辑(来自“答案”):

我尝试过:更新someTable SET someColumn = CONCAT(CAST(RAND()* 10000000000作为BIGINT),RIGHT(someColumn,3))

但是,由于我是SQL的新手,所以我不知道如何使它起作用。我为正在创建的变量添加了'someColumn = new column name。 RIGHT(someColumn)=我要更改的列。当我这样做时,我得到消息,正确的函数需要2个参数?

Zohar的示例:我有一个变量,例如包含:1724981628R01在此变量中的所有这些值上,我想将前10个字母随机化,并保留后三个字母(R01)。我该怎么办?

1 个答案:

答案 0 :(得分:0)

几件事。首先,您转换为大int不能保证结果具有正确的字符数。

第二,rand()对于查询的所有行都是常量。试试这个版本:

UPDATE someTable
    SET someColumn = CONCAT(FORMAT(RAND(CHECKSUM(NEWID())
                                       ), '0000000000'
                                  ),
                            RIGHT(someColumn, 3)
                           );