2014-10-28 3 views
0

Моя встроенная функция таблицы в основном выводит числа, от 1 до числа, которое вводится в функцию. Поскольку я новичок в SQL Server, я не уверен, как реализовать цикл while внутри функции. Моя реализация ниже. Как и ожидалось, я получаю много ошибок компилятора на WHILE, BEGIN, THEN. Может ли кто-нибудь предложить, как я могу улучшить код. Благодаря!Использование локального параметра функции внутри цикла 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

+0

@ user3760741 проверить сейчас –

Смежные вопросы