簡體   English   中英

存儲過程中CTE的問題

[英]issue on with CTE in stored procedure

我有一個這樣的存儲過程:

CREATE PROCEDURE prtl_usp_portal_logdaily 
    @startdate DATETIME,
    @enddate DATETIME,
    @usertype int,
    @gradelist varchar(1000) = null
AS
BEGIN
    DECLARE @qry NVARCHAR(MAX)
    SET @qry=''

    IF(@usertype = 1)
    BEGIN
       ;WITH mycte AS
       (
           SELECT CAST(@startdate AS DATETIME) DateValue
           UNION ALL
           SELECT DateValue + 1
           FROM mycte   
           WHERE DateValue + 1 <= @enddate
      )

      SET @qry = N'SELECT datepart(day,DateValue) AS daycode,
   (select count(DISTINCT a.userID) from PRTL_UserAccessLog a
   inner join prtlv_familydetails b
   on a.userid=b.familyid 
   INNER JOIN STD_StudentDetails c ON b.FamilyID = c.familyid
    INNER JOIN dbo.STD_CurrentAcademicInformation d ON c.StudentID = d.StudentID
   WHERE d.GradeID IN ('+@gradelist+')
   and a.usertypeid=1 and convert(date,DateTime) = DateValue) countvalue,
   (select count(*) from prtlv_familydetails) AS total_count,
   ROUND((CAST((select count(DISTINCT a.userID) from PRTL_UserAccessLog a
   inner join prtlv_familydetails b
   on a.userid=b.familyid 
   INNER JOIN STD_StudentDetails c ON b.FamilyID = c.familyid
    INNER JOIN dbo.STD_CurrentAcademicInformation d ON c.StudentID = d.StudentID
   WHERE d.GradeID IN ('+@gradelist+')
   and a.usertypeid=1 and convert(date,DateTime) = DateValue) AS FLOAT)/CAST((select count(*) from prtlv_familydetails)AS FLOAT)),3) AS average, 
   datename(dw,DateValue) AS day_name 
   FROM    mycte';
END
---
 EXEC (@qry)
 END

運行該過程時,出現以下錯誤:

關鍵字“ SET”附近的語法不正確。

谷歌搜索后,我發現如果with cte is not the first statement, semicolon should be placed before cte statement 我已經把分號了。 但這是行不通的。

WITH需要緊隨其后的是SELECT (或UPDATEDELETEINSERT ),而不是SET ,並且以下語句應引用至少一個定義的公用表表達式。 您不要在SELECT跟隨WITH (或UPDATEDELETEINSERT )。

此外,動態sql的范圍將無法識別由執行查詢字符串之前的過程形成的公用表表達式(cte)。

指定一個臨時的命名結果集,稱為公用表表達式(CTE)。 這是從一個簡單的查詢派生的,並在單個SELECT,INSERT,UPDATE或DELETE語句的執行范圍內定義。 此子句也可以在CREATE VIEW語句中用作其定義SELECT語句的一部分。

請參閱: WITH common_table_expression

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM