Sql server TSQL:在Update语句中生成随机字符串

Sql server TSQL:在Update语句中生成随机字符串,sql-server,Sql Server,我需要通过按长度相等的随机字符串更改所有文本值来混淆SQL Server数据库: qwert -> vno3w a123456 -> vn58wof 我不能在更新中使用过程或函数,而且一些字符串可能有数千个符号,所以GUID不是一个变体 我发现最好的是 declare @BinaryData varbinary(max) , @CharacterData varchar(max) , @Length int = 2048 set @BinaryData=crypt_gen_ran

我需要通过按长度相等的随机字符串更改所有文本值来混淆SQL Server数据库:

qwert -> vno3w
a123456 -> vn58wof
我不能在更新中使用过程或函数,而且一些字符串可能有数千个符号,所以GUID不是一个变体

我发现最好的是

declare @BinaryData varbinary(max)
, @CharacterData varchar(max)
, @Length int = 2048

set @BinaryData=crypt_gen_random (@Length) 

set @CharacterData=cast('' as xml).value('xs:base64Binary(sql:variable("@BinaryData"))', 'varchar(max)')
原因是要在DB上检查新组件的性能,就像生产客户机一样,在不删除真实用户数据的情况下,不会给我们提供备份。 外键在我目前的情况下不是问题


你能帮忙吗?

1。这太宽了。2.你到底为什么要做这样的事情?告诉我们你已经有了什么。你可以加密整个数据库。那么现在是外键的值呢?除非禁用外键,否则无法用一个更新另一个。然后你必须确保你将两边都更新为相同的随机值。这里有太多的假设。你已经有的有什么问题吗?看起来应该有用。
SELECT STUFF((SELECT '' + symbols FROM (
SELECT CHAR(
CASE WHEN r between 0 and 9 THEN 48
WHEN r between 10 and 35 THEN 55
ELSE 61 END + r) symbols
FROM
master..spt_values
CROSS JOIN
(SELECT CAST(RAND(ABS(CHECKSUM(NEWID()))) *61 as int) r) a WHERE type = 'P' AND number < 3333) symbols
FOR XML PATH('')) ,1,1,'') AS RandText