Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 关于要求,您应该要求OP提供适当的样本数据,以便我们在回答中使用。尽管如此,我的方法的主要好处是,您不必对记录进行随机排序,因为它们已经是随机的了。如果需要的话?我不知道,你为什么不试试呢?因为事实上,您正在比较两种方法/建议/答案,它们做的事情并不相同(_Sql_Sql Server - Fatal编程技术网

Sql 关于要求,您应该要求OP提供适当的样本数据,以便我们在回答中使用。尽管如此,我的方法的主要好处是,您不必对记录进行随机排序,因为它们已经是随机的了。如果需要的话?我不知道,你为什么不试试呢?因为事实上,您正在比较两种方法/建议/答案,它们做的事情并不相同(

Sql 关于要求,您应该要求OP提供适当的样本数据,以便我们在回答中使用。尽管如此,我的方法的主要好处是,您不必对记录进行随机排序,因为它们已经是随机的了。如果需要的话?我不知道,你为什么不试试呢?因为事实上,您正在比较两种方法/建议/答案,它们做的事情并不相同(,sql,sql-server,Sql,Sql Server,关于要求,您应该要求OP提供适当的样本数据,以便我们在回答中使用。尽管如此,我的方法的主要好处是,您不必对记录进行随机排序,因为它们已经是随机的了。如果需要的话?我不知道,你为什么不试试呢?因为事实上,您正在比较两种方法/建议/答案,它们做的事情并不相同(而且比较变得有点毫无意义)@lptr好吧,我已经测试过了。不过我的路还是快了。太好了!如果您将它(选择测试脚本)编辑到您的答案中,它将恰好(或非常接近)OP所寻找的内容。 select right('ZZZZZZ' + format(row_n


关于要求,您应该要求OP提供适当的样本数据,以便我们在回答中使用。尽管如此,我的方法的主要好处是,您不必对记录进行随机排序,因为它们已经是随机的了。如果需要的话?我不知道,你为什么不试试呢?因为事实上,您正在比较两种方法/建议/答案,它们做的事情并不相同(而且比较变得有点毫无意义)@lptr好吧,我已经测试过了。不过我的路还是快了。太好了!如果您将它(选择测试脚本)编辑到您的答案中,它将恰好(或非常接近)OP所寻找的内容。
select right('ZZZZZZ' + format(row_number() over (order by newid()), 'X'), 6)
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
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?]
WITH TAZ AS
(SELECT CAST('A' COLLATE Latin1_General_BIN AS CHAR(1)) AS LETTER, ASCII('A') AS CAR
 UNION ALL
 SELECT CAST(CHAR(CAR + 1)  COLLATE Latin1_General_BIN  AS CHAR(1)), CAR + 1
 FROM   TAZ
 WHERE  CHAR(CAR + 1) <= 'Z'
)
SELECT TOP 4000000 
       T1.LETTER + T2.LETTER + T3.LETTER + T4.LETTER + T5.LETTER + T6.LETTER AS L6
FROM TAZ AS T1
     CROSS JOIN TAZ AS T2
     CROSS JOIN TAZ AS T3
     CROSS JOIN TAZ AS T4
     CROSS JOIN TAZ AS T5
     CROSS JOIN TAZ AS T6
ORDER BY NEWID()
-- This view is needed for the function to work. Read my blog post for details.
CREATE VIEW dbo.GuidGenerator
AS
    SELECT Newid() As NewGuid;
GO

-- slightly modified version to enable the generation of up to 100,000,000 rows.
CREATE FUNCTION dbo.RandomStringGenerator
(
    @Length int,
    @Count int -- Note: up to 100,000,000 rows
)
RETURNS TABLE
AS 
RETURN 

WITH E1(N) AS (SELECT N FROM (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9)) V(N)),   -- 10
     E2(N) AS (SELECT 1 FROM E1 a, E1 b), --100
     E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10,000
     Tally(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY @@SPID) FROM E4 a, E4 b) -- 100,000,000

SELECT TOP(@Count) 
    N As Number,
    (
    SELECT  TOP (@Length) CHAR(
            CASE Abs(Checksum(NewGuid)) % 2
                WHEN 0 THEN 65 + Abs(Checksum(NewGuid)) % 26 -- Random upper case letter
                ELSE 48 + Abs(Checksum(NewGuid)) % 10 -- Random digit
            END
            )
    FROM Tally As t0  
    CROSS JOIN GuidGenerator 
    WHERE  t0.n <> -t1.n
    FOR XML PATH('')
    ) As RandomString
FROM Tally As t1

GO
SELECT DISTINCT TOP 4000000 Number, RandomString
FROM  dbo.RandomStringGenerator(6,100000000)
WHERE RandomString NOT LIKE '%[IiOoLl01]%' -- in case your database's default collation is case sensitive...
WITH Tbl AS
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY Em_Id) As Rn
    FROM <TableNameHere>
), Rnd AS
(
    SELECT DISTINCT TOP 4000000 ROW_NUMBER() OVER (ORDER BY Number) As Rn, RandomString
    FROM  dbo.RandomStringGenerator(6,100000000)
    WHERE RandomString NOT LIKE '%[IiOoLl01]%'
)

SELECT Em_Id, RandomString
FROM Tbl
INNER JOIN rnd
    ON Tbl.Rn = Rnd.Rn