存储过程的SQL Server语法错误

时间:2013-06-27 17:13:19

标签: sql-server tsql

我在尝试创建存储过程时遇到语法错误,尽管完全相同的代码作为查询运行完美。我自己也看不到错误,所以任何帮助都会受到赞赏。

错误是:

Msg 102,Level 15,State 1,Procedure DataSelect,Line 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是否存在语法差异?谢谢。

1 个答案:

答案 0 :(得分:4)

WITH之前需要一个分号,否则它将被视为前一个语句的修饰符。只需改变这一行就可以了:

EXEC DataUpdate;

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

;WITH OrderdYTD AS