A little off topic maybe, but below is a possible technique to hash demographic or personally identifying data for a QA or Development environment. The distribution of the data remains basically the same as the original. Please note that this is something I hacked together in a few minutes, and I've never actually used this professionally. Also, the performance would suck unless customer name and birth_date are both indexed.
declare @customer table
(
customer_id int not null,
first_name varchar(40) not null,
last_name varchar(40) not null,
birth_date smalldatetime not null
);
insert into @customer (customer_id, first_name, last_name, birth_date)
select 1, 'Beverly','Johnson','1970/04/01' union all
select 2, 'Mark','Johnson','1972/03/10' union all
select 3, 'Mark','Johnson','1972/10/03' union all
select 4, 'Scott','Lemon','1982/01/04' union all
select 5, 'Michelle','Snow','1958/10/24' union all
select 6, 'Scott','Richards','1958/10/24';
select
customer_id,
left(first_name,1)+cast( (select count(*) from @customer b where b.first_name > a.first_name) as varchar(9) ) first_name,
left(last_name,1)+cast( (select count(*) from @customer b where b.last_name > a.last_name) as varchar(9) ) last_name,
dateadd( day, (select count(*) from @customer b where b.birth_date > a.birth_date), birth_date ) birth_date
from
@customer a
order by
customer_id;
customer_id first_name last_name birth_date
----------- ---------- ---------- -----------------------
1 B5 J3 1970-04-04 00:00:00
2 M3 J3 1972-03-12 00:00:00
3 M3 J3 1972-10-04 00:00:00
4 S0 L2 1982-01-04 00:00:00
5 M2 S0 1958-10-28 00:00:00
6 S0 R1 1958-10-28 00:00:00
"Do not seek to follow in the footsteps of the wise. Instead, seek what they sought." - Matsuo Basho