我有以下 T-SQL,用于生成一些随机值:
DECLARE @cnt INT = 0;
WHILE @cnt < 100
BEGIN
select
Random_String =
substring(x,(abs(checksum(newid()))%36)+1,1)+
substring(x,(abs(checksum(newid()))%36)+1,1)+
substring(x,(abs(checksum(newid()))%36)+1,1)
from
(select x='0123456789ABCDEFGHJKLMNPQRSTUWXYZ%#-=+') a
SET @cnt = @cnt + 1;
END;
这很好用,除了每个字符串都作为一个独立的结果集返回。
有没有办法重构该查询以将每个值作为同一结果集中的一行返回?
环境是 MS SQL Server 2008。
谢谢!
最佳答案
做这种事情的最好方法是忘记 t-sql 中的循环。使用数字或计数表是解决此问题的更好方法。
WITH
E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
E2(N) AS (SELECT 1 FROM E1 a cross join E1 b), --10E+2 or 100 rows
cteTally(N) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E2
)
select
Random_String =
substring(x,(abs(checksum(newid()))%36)+1,1)+
substring(x,(abs(checksum(newid()))%36)+1,1)+
substring(x,(abs(checksum(newid()))%36)+1,1)
from
(select x='0123456789ABCDEFGHJKLMNPQRSTUWXYZ%#-=+') a
cross join cteTally t
where t.N < = 100
关于sql - 在 SQL Server 中将 while 循环值作为多行而不是多个结果集返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39087442/