[英]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.