我在尝试创建存储过程时遇到语法错误,尽管完全相同的代码可以完美地作为查询运行。我自己看不到错误,因此我们将不胜感激。
错误是:
消息 102,级别 15,状态 1,过程数据选择,第 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 是否存在语法差异?谢谢。
最佳答案
在 WITH
之前需要有一个分号,否则它会被视为前面语句的修饰符。只需更改此行即可:
EXEC DataUpdate;
如果您不以分号终止所有语句,标准做法是将它们放在 CTE
定义之前:
;WITH OrderdYTD AS
关于sql-server - SQL Server 存储过程语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17349325/