小编use*_*792的帖子

TSQL:有没有更快或更好的方法来加密值?

我有一个屏蔽/加密函数,它循环遍历字符串的每个字符并用表中的值替换它。表格示例

Position    OriginalValue   MaskedValue
1           a               t
1           b               @
2           a               r
Run Code Online (Sandbox Code Playgroud)

我的功能适用于小集合,但真正的大表需要很长时间。有没有更好的方法来编写这个函数?

CREATE  FUNCTION [dbo].[fn_SSNMask] (@string VARCHAR(100))  
  RETURNS VARCHAR(100) 
AS  

BEGIN 
DECLARE @Mask AS VARCHAR(100)
SET @Mask= ''

DECLARE @Char AS CHAR(1)
DECLARE @Counter AS INT=1
DECLARE @CharReplace AS CHAR(1)

WHILE @Counter <= (select len(@string))
BEGIN
    SET @Char=SUBSTRING(@string,@Counter,1)
    SELECT @CharReplace =maskedvalue FROM dbo.Mask WHERE Position=@Counter AND originalvalue=@Char

    SET @Mask=@Mask+ ISNULL(@CharReplace,@Char)

    SET @Counter=@Counter + 1
    SET @Char=NULL
    SET @CharReplace=NULL
END

RETURN (@Mask)

END
Run Code Online (Sandbox Code Playgroud)

sql sql-server encryption user-defined-functions

2
推荐指数
1
解决办法
771
查看次数