替换 CustomerID 字段中的个别数字 SQL 服务器

Replacing individual digits in a CustomerID field SQL Server

我有一些客户数据需要匿名化。我有由数字组成的 customerIds。

例如:

CustomerID
3937487

我需要将每个数字替换为一个替代数字,这应该足以满足我的要求。基于以下查找 table

我遇到的唯一问题是在字段上使用 REPLACE 函数时:

REPLACE(REPLACE(CustomerID,2,9),9,6)

这给了我

CustomerID
3637487

它将数字 2 交换为 9,然后将相同的 9 交换为 6。它只需要替换数字一次。

由于我要一次性更改数百万条记录,因此从性能角度来看,使用 temp tables 是不可能的。这可以在一个查询中递归地完成吗?

我想不出有任何方法可以在单个查询中完成此操作。如果我想这样做,我会创建一个类似

的函数
CREATE FUNCTION [dbo].[AnonymiseId]
(
@Id [int]
)
RETURNS [int]
AS
BEGIN
    -- Declare the return variable here
    DECLARE @ResultVar int;

    DECLARE @substitutions nvarchar(10) = '7295380146';

    DECLARE @stringId nvarchar(100) = CONVERT(nvarchar(100), @Id);

    DECLARE @i int = 1

    DECLARE @substituteStringId nvarchar(100) = '';

    WHILE @i <= LEN(@stringID)
    BEGIN
        DECLARE @char nvarchar = SUBSTRING(@stringId, @i, 1);
        DECLARE @charValue int = CONVERT(int, @char);

        DECLARE @subsChar nvarchar = SUBSTRING(@substitutions, @charValue + 1, 1);

        SET @substituteStringId = CONCAT(@substituteStringId, @subsChar);

        SET @i = @i + 1
    END

    SET @ResultVar = CONVERT(int, @substituteStringId);

    -- Return the result of the function
    RETURN @ResultVar;

END
GO

然后在查询中使用它

SELECT dbo.AnonymiseId(CustomerID) FROM ???