如何在不循环的情况下在同一个表中移动相同的列数据

时间:2009-10-23 20:25:47

标签: sql-server sql-server-2005 tsql

这是我想要做的:

我正在尝试模糊数据并创建一个用于文档的工作数据库。我有一个名字列表,我想在表格中混淆。

KEY FIRSTNAME  
135 CYNTHIA  
181 MARK  
186 MARGARET  
212 DESIVANITA  
506 AMY  
606 BRENDA   
628 KATHLEEN  
629 Johnna  
636 TAMARA   
652 KATHLEEN   

此表有大约50K行。我想知道是否有一种方法可以在不使用循环的情况下混淆名称?

3 个答案:

答案 0 :(得分:4)

我建议创建虚假数据而不是混淆真实数据。使用虚假数据,您不可能暴露敏感信息。 Red Gate有一个很好的工具来创建测试数据SQL Data Generator,这使得在给定表模式的情况下使用各种类型的规则生成逼真的虚假数据变得微不足道。

答案 1 :(得分:1)

一种可能性是(假设你不介意重复的名字):

DECLARE @T TABLE (ID INT, FirstNAme VARCHAR(10), newColumn VARCHAR(10))

INSERT INTO @T
        ( ID, FirstNAme )
SELECT 135 ,'CYNTHIA'
UNION ALL SELECT 181 ,'MARK'
UNION ALL SELECT 186 ,'MARGARET'
UNION ALL SELECT 212 ,'DESIVANITA'
UNION ALL SELECT 506 ,'AMY'

UPDATE @T
SET NewColumn = (SELECT TOP 1 FirstName FROM @T t2 ORDER BY NEWID())

SELECT *
FROM @t

答案 2 :(得分:0)

我猜通过使用cte和row_number()可以完成