[英]SQL Server 2008 : What is the best way for inserting big chunk of data?
[英]What is the best way to anonymize ID values in sql server 2008
我在SQL 2008中有2张表
Table1
Id Name Surname City
1000 Alex White London
1001 John Brown Brussels
..
Table2
Id Surgeon Room aId
1 Mike J. A104 1000
2 Jack S. C144 1001
...
我有一个查询,如:
Select a.Id,b.Id,
a.Name,a.Surname,a.City,b.Surgeon,b.Room
into #results
from Table1 a
inner join Table2 b on a.Id = b.aId
我想要做的是通过使用虚拟值而不是真实值来匿名化a.Id和b.Id值的隐私。 我之前添加了随机数学运算,例如:
Select aId = a.Id * 22 / 5 + 14 * 2
,bId = b.Id * 12 / 4 + 7 * 3
...
但老实说,我对自己在这里所做的事情并不满意,我正在寻找一种更专业的方法来提供此服务。 任何意见,将不胜感激。
如果不需要确保匿名ID是唯一的,并且不需要基于匿名ID查找真实的ID,则可以将CheckSum()或HashBytes()函数与Table1和表2:
Select aId = CheckSum(a.Name + a.Surname) % 10000
,bId = HashBytes('SHA1', b.Surgeon) % 10000
,a.Name,a.Surname,a.City,b.Surgeon,b.Room
into #results
from Table1 a
inner join Table2 b on a.Id = b.aId
如果需要确保表中的每个Id值都有唯一的值,并且还需要基于匿名ID查找真实的ID,则可以按以下方式构造查找表:
CREATE TABLE Anon
(
ID INTEGER NOT NULL PRIMARY KEY,
AnonID UNIQUEIDENTIFIER DEFAULT NewID()
);
然后可以在不返回实际ID的查询中使用它:
Select aID = Anona.AnonID,
bID = Anonb.AnonID,
a.Name,a.Surname,a.City,b.Surgeon,b.Room
into #results
from Table1 a inner join Table2 b on a.Id = b.aId
inner join Anon Anona on a.Id = Anona.Id
inner join Anon Anonb on b.Id = Anonb.Id
将需要维护Anon表,以确保它包含表1和表2中的所有ID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.