sql-server - SQL Server 存储过程语法错误

标签 sql-server tsql

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

错误是:

消息 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/

相关文章:

sql-server - Azure Release Pipeline DACPAC 部署期间登录失败

sql - INNER JOIN 与 INNER JOIN (SELECT . FROM)

sql-server - 如何在 SQL 中删除此字符串中的额外占位符?

sql - 如何减去下一行SQL Server中的列值

sql - 在 SQL Server 中将特定列的值显示为标题

c# - 传入地理类型和 SQL 转换为地理类型?

sql-server - 从外部 ip 启用 sql server 连接

sql-server - 将十六进制值转换为bigint

sql-server - Entity Framework 高效查询

sql-server - SQL Server计算具有不同值的2列中的数据