• 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