select top (100000)
cte.*,
concat
(
substring(s.random32, p.p1, 1),
substring(s.random32, p.p2, 1),
substring(s.random32, p.p3, 1),
substring(s.random32, p.p4, 1),
substring(s.random32, p.p5, 1),
substring(s.random32, p.p6, 1)
) as combo6
from
--employees
(
--4mil employees
select top (4000000)
row_number() over(order by @@spid) as empid, --this could be empid, eg. empid as n
a.name as empfirstname, a.name as emplastname, b.type_desc as emptype
from sys.all_objects as a
cross join sys.all_objects as b
) as cte
--random string
cross join
(
--one random string (excluding 1, 0, I, O)
select top (1)
(
select v.v as '*'
from
(values
('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),
('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),
('J'),('K'),('L'),('M'),('N'), ('P'),('Q'),('R'),
('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')
) as v(v)
order by newid()
for xml path('')
) as random32
) as s
--combo6 positions in string
cross apply
(
select
/*for 32 chars = len(rand32) */
(power(32,0)+(cte.empid-1)%power(32, 1))/power(32,0) as p1,
(power(32,1)+(cte.empid-1)%power(32, 2))/power(32,1) as p2,
(power(32,2)+(cte.empid-1)%power(32, 3))/power(32,2) as p3,
(power(32,3)+(cte.empid-1)%power(32, 4))/power(32,3) as p4,
(power(32,4)+(cte.empid-1)%power(32, 5))/power(32,4) as p5,
(power(32,5)+(cte.empid-1)%power(32, 6))/power(32,5) as p6
) as p
go
....or....(?)
create or alter function dbo.[why?]()
returns char(6)
as
begin
declare @combo6 char(6);
declare @randomstring char(32) = cast(session_context(N'randomstring') as char(32));
if @randomstring is null
begin
select @randomstring =
(
select v.v as '*'
from
(values
('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),
('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),
('J'),('K'),('L'),('M'),('N'), ('P'),('Q'),('R'),
('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')
) as v(v)
order by checksum(@@idle, @@cpu_busy, (select max(last_request_end_time) from sys.dm_exec_sessions where session_id=@@spid), v.v)
for xml path('')
);
end
declare @randomnumber int = 1 + isnull(cast(session_context(N'randomnumber') as int), abs(checksum(@randomstring))%10000000);
select @combo6 = concat(
substring(@randomstring, p.p1, 1),
substring(@randomstring, p.p2, 1),
substring(@randomstring, p.p3, 1),
substring(@randomstring, p.p4, 1),
substring(@randomstring, p.p5, 1),
substring(@randomstring, p.p6, 1)
)
from
(
select
/*for 32 chars = len(rand32) */
(power(32,0)+(@randomnumber-1)%power(32, 1))/power(32,0) as p1,
(power(32,1)+(@randomnumber-1)%power(32, 2))/power(32,1) as p2,
(power(32,2)+(@randomnumber-1)%power(32, 3))/power(32,2) as p3,
(power(32,3)+(@randomnumber-1)%power(32, 4))/power(32,3) as p4,
(power(32,4)+(@randomnumber-1)%power(32, 5))/power(32,4) as p5,
(power(32,5)+(@randomnumber-1)%power(32, 6))/power(32,5) as p6
) as p;
exec sp_set_session_context @key=N'randomstring', @value=@randomstring;
exec sp_set_session_context @key=N'randomnumber', @value=@randomnumber;
return(@combo6);
end
go
exec sp_set_session_context @key=N'randomstring', @value=null;
exec sp_set_session_context @key=N'randomnumber', @value=null;
go
select top (100000) dbo.[why?]() as empid, a.name, b.object_id
from sys.all_objects as a
cross join sys.all_objects as b
go
--drop function dbo.[why?]