我正在尝试使用SSMS v18.2通过while循环在SQL Server 2017上编写一个内联表值函数。
我可以在一个循环的内联表值函数中声明一个变量吗?
如果是,那么它的语法是什么?
发布于 2019-10-10 16:06:39
我回答的是注释而不是问题,这里的问题是“因为我想使用一个具有int和increasing类型变量的while循环”。简单地说,不要这样做。最好的(我的意思是最好的)方法是使用Tally (它们也比rCTE快)。
下面将生成数字1-1,000,000,并将在几秒钟内完成:
WITH N AS(
SELECT N
FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
FROM N N1, N N2, N N3, N N4, N N5) --1 Million
SELECT I
FROM Tally;上面是一个基于集合的解决方案,可以“轻松”地扩展以处理数据集;例如,创建两个日期之间的所有日期。
你也可以在Jeff Moden的这篇文章中阅读关于Tallys的文章:The "Numbers" or "Tally" Table: What it is and how it replaces a loop
这个问题并没有真正回答OP的真正问题,它只是向他们介绍了tally 9,这不适合在评论中使用)。我建议,Hai Nguyen,你可以问一个新的问题,解释你真正的目标,这样我们就可以帮助你了解如何将上述内容付诸实践。
https://stackoverflow.com/questions/58317616
复制相似问题