gpt4 book ai didi

sql - 在 SQL Server 中将 while 循环值作为多行而不是多个结果集返回

转载 作者:行者123 更新时间:2023-12-01 15:33:20 24 4
gpt4 key购买 nike

我有以下 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com