sql - 使用 cte 创建 while 循环

标签 sql sql-server common-table-expression

如何从 while 循环创建 sql server cte
我的循环是这样的

  declare @ind as int
  declare @code as nvarchar
  set @ind  = 0
   while @ind < 884
  begin
    select @ind  = @ind  + 1
    --here execute Procedure 
        --and set return value to variable 
    set @code = cast (@ind   as nvarchar)
  end

最佳答案

如果您需要表格:

;WITH Sec(Number) AS 
(
    SELECT 0 AS Number
    UNION ALL
    SELECT Number + 1
    FROM Sec
    WHERE Number < 884
) 

SELECT * FROM Sec
OPTION(MAXRECURSION 0)

如果您需要一个字符串:

;WITH Sec(Number) AS 
(
    SELECT 0 AS Number
    UNION ALL
    SELECT Number + 1
    FROM Sec
    WHERE Number < 884
) 

SELECT STUFF(a.[Str], 1, 1, '')
FROM
(
    SELECT (SELECT ',' + CAST(Number AS NVARCHAR(3)) 
    FROM Sec
    FOR XML PATH(''), TYPE
    ).value('.','varchar(max)') AS [Str] 
) AS a
OPTION(MAXRECURSION 0)

关于sql - 使用 cte 创建 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12929165/

相关文章:

mysql - 计算表中两组不同的行,然后将它们相除

MySQL 变量优先级

SQL - 通过分组来获取总和,但如果总和为 0,则返回一行

sql - 如何将多行作为字符串合并到一行中?

sql - 使用 SSIS 包加载数据时理解间歇性不一致的问题

mysql - SQL更新到自增列

sql - 查询以列出父级列中的每个子记录

sql - 在脚本中使用 T-SQL 'Two Digit Year Cutoff'

sql-server - 递归识别对象依赖关系的查询

PostgreSQL 递归 CTE 性能问题