5

我在尝试创建存储过程时遇到语法错误,尽管完全相同的代码可以完美地作为查询运行。我自己看不到错误,因此将不胜感激。

错误是:

消息 102,级别 15,状态 1,过程 DataSelect,第 12 行“OrderedYTD”附近的语法不正确。

代码很简单:

CREATE PROCEDURE DataSelect
(
@TargetPdc int
)
AS
BEGIN

    -- Refresh Data Here
    EXEC DataUpdate

    -- Select Data for Report
    WITH OrderedYTD AS
    (
        SELECT custextract.*, histextract.*,
      ROW_NUMBER () OVER (PARTITION BY custextract.custcustno ORDER BY histextract.salesytd desc) AS RowNumber
        FROM custextract 
        INNER JOIN histextract 
            ON custextract.custcustno = histextract.histcustno
        WHERE (custextract.ecall = 'Y')
    ) 

SELECT OrderedYTD.*
FROM OrderedYTD
WHERE RowNumber <= 10 and pdc = @TargetPdc;

END

我已经多次运行从 WITH 语句开始的所有内容(减去 WHERE 子句中的变量)作为查询多次,没有问题。在存储过程中使用 CTE 是否存在语法差异?谢谢。

4

1 回答 1

4

您需要在 前加一个分号WITH,否则它会被视为前面语句的修饰符。只需更改此行,它应该可以工作:

EXEC DataUpdate;

如果您不使用分号终止所有语句,标准做法是将它们放在您的CTE定义之前:

;WITH OrderdYTD AS
于 2013-06-27T17:16:35.270 回答