2015-01-28 9 views
-2

나는 함수를 만들려고 노력하고 있지만 그 안에 WITH을 얻는 방법을 모르겠습니다. 여기 내 코드가있다.SQL 함수에서 WITH를 사용 하시겠습니까?

CREATE FUNCTION CubicVolume (@StartDate date, @EndDate date) RETURNS @TableDays TABLE 
(Days int) 
AS 
BEGIN 
    INSERT @TableDays 
     WITH Dates AS (
       SELECT @StartDate AS DayInQuestion 
        UNION ALL 
       SELECT DATEADD(Day, 1, DayInQuestion) AS DayInQuestion 
        FROM Dates AS Dates 
        WHERE (DayInQuestion < @EndDate) 
       ) 
    SELECT DISTINCT count(Dates.DayInQuestion) 
     FROM Dates AS Dates LEFT OUTER JOIN 
     HEATHrs ON Dates.DayInQuestion = HEATHrs.StartDate 
     WHERE  (CAST(DATEPART(weekday, Dates.DayInQuestion) AS int) BETWEEN 2 AND 6) 
    RETURN 
END 
+1

당신이 "그 안에 함께 얻을"무엇을 의미합니까? – ryanyuyu

+1

SQL Server에서'with'는'insert' 전에옵니다. 이것은 모든 데이터베이스에서 사실이 아닙니다. –

답변

2

당신은 INSERT 전에 공통 테이블 식 (CTE)를 추가해야한다

WITH Dates AS 
(
    SELECT @StartDate AS DayInQuestion 
     UNION ALL 
    SELECT DATEADD(Day, 1, DayInQuestion) AS DayInQuestion 
     FROM Dates AS Dates 
     WHERE (DayInQuestion < @EndDate) 
) 
INSERT @TableDays 
SELECT DISTINCT count(Dates.DayInQuestion) 
    FROM Dates AS Dates LEFT OUTER JOIN 
    HEATHrs ON Dates.DayInQuestion = HEATHrs.StartDate 
    WHERE  (CAST(DATEPART(weekday, Dates.DayInQuestion) AS int) BETWEEN 2 AND 6) 
+0

고마워, 나는 그것을 시도했다고 생각했다. –