2014-10-28 4 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 지금 확인하십시오. –