2014-10-28 82 views
0

我的內聯表函數基本上輸出數字,從1到輸入到函數中的數字。由於我是SQL Server新手,我不確定如何在函數內部實現一個while循環。我的實現如下。正如我所料,我在WHILEBEGINTHEN得到了很多編譯器錯誤。任何人都可以建議我如何改進代碼。謝謝!在while循環中使用本地函數參數 - SQL Server

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

最簡單的方法是使用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) 
+0

感謝,但這個是一個內聯表函數?你可以幫助組建一個內聯表格功能 – user3760741 2014-10-28 05:42:16

+0

@ user3760741檢查現在 – 2014-10-28 05:52:26