簡體   English   中英

CTE存儲過程無法創建

[英]Stored Procedure With CTE Fails to Create

我測試了這個查詢,它是在另一個線程的幫助下構建的,它工作得很好,將它移動到一個存儲過程中,我需要為它提供一個參數(EID的值)。 因此,我對完美測試的查詢所做的唯一更改是在頂部和底部添加@param1參數,在頂部添加創建過程行。

我無法保存它,因為它在4行窒息'n'說明 - SQL80001:'n'不是公認的選項。

走到這一步是漫長的道路。 有人可以幫我把終點線推到這里嗎?

CREATE PROCEDURE [dbo].[UpdateSubIdx]
@param1 varchar(30) 

WITH n AS 
(
SELECT  DID AS DID,
        sub_idx AS current_id,
        ROW_NUMBER() OVER (PARTITION BY EID ORDER BY alt_sub_idx) AS new_id
FROM    GETT_Documents 
)
--SELECT * FROM N
UPDATE  GETT_Documents
        SET sub_idx = n.new_id
FROM    GETT_Documents  G
JOIN    n ON N.DID = G.DID
WHERE   EID = 'AC-1.1.i';

---Repeat for the alt sub idx column renumberation
WITH n AS 
(
SELECT  DID AS DID,
        alt_sub_idx AS current_id,  
ROW_NUMBER() OVER (PARTITION BY EID ORDER BY sub_idx)*10 AS new_id
  FROM    GETT_Documents 
 )

UPDATE  GETT_Documents
        SET alt_sub_idx = n.new_id
FROM    GETT_Documents  G
JOIN    n ON N.DID = G.DID
WHERE   EID = @param1;

此致,肯......

您需要在WITH關鍵字之前放置一個分號( ; )來終止前一個語句。

公用表表達式必須以a開頭; - 有關這方面的更多信息,請參閱此處: 為什么CTE應以分號開頭?

您還需要使用AS BEGIN ... END來標記過程的主體。 以下是應該起作用的變化:

CREATE PROCEDURE [dbo].[UpdateSubIdx] @param1 varchar(30) 
As Begin

    ;WITH n AS 
    (
    SELECT  DID AS DID,
            sub_idx AS current_id,
            ROW_NUMBER() OVER (PARTITION BY EID ORDER BY alt_sub_idx) AS new_id
    FROM    GETT_Documents 
    )
    --SELECT * FROM N
    UPDATE  GETT_Documents
            SET sub_idx = n.new_id
    FROM    GETT_Documents  G
    JOIN    n ON N.DID = G.DID
    WHERE   EID = 'AC-1.1.i';

    ---Repeat for the alt sub idx column renumberation
    ;WITH n AS 
    (
    SELECT  DID AS DID,
            alt_sub_idx AS current_id,  
    ROW_NUMBER() OVER (PARTITION BY EID ORDER BY sub_idx)*10 AS new_id
      FROM    GETT_Documents 
     )

    UPDATE  GETT_Documents
            SET alt_sub_idx = n.new_id
    FROM    GETT_Documents  G
    JOIN    n ON N.DID = G.DID
    WHERE   EID = @param1;
End

暫無
暫無

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

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