在while循环中使用本地函数参数 - SQL Server

时间:2014-10-28 05:17:08

标签: sql sql-server tsql

我的内联表函数基本上打印出数字,从1到函数输入的数字。由于我是SQL Server的新手,我不确定如何在函数内部实现while循环。我的实现如下。正如预期的那样,我在WHILEBEGINTHEN处遇到了很多编译器错误。任何人都可以建议我如何改进代码。谢谢!

CREATE FUNCTION num_F(@nnn INT)
RETURNS TABLE
AS
RETURN (SELECT CASE 
                WHEN @nnn = 0
                    THEN NULL
                    ELSE WHILE dbo.num_F(@nnn) > 0
                          BEGIN
                          THEN dbo.num_F(@nnn)
                          SET dbo.num_F(@nnn) = dbo.num_F(@nnn)-1
                         END
                         GO
                END as First_Col
        ORDER BY First_Col ASC)        

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用common table expression (CTE)

CREATE FUNCTION Numfunctn1 (@num INT)
RETURNS TABLE
AS
    RETURN(
      WITH cte
           AS (SELECT 1 id
               UNION ALL
               SELECT id + 1
               FROM   cte
               WHERE  id < @num)
      SELECT *
       FROM   cte) 


SELECT *
FROM   Numfunctn1(10)