Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用CTE时存储过程创建失败_Sql_Sql Server_Common Table Expression - Fatal编程技术网

Sql 使用CTE时存储过程创建失败

Sql 使用CTE时存储过程创建失败,sql,sql-server,common-table-expression,Sql,Sql Server,Common Table Expression,正在运行SQLServer2008。下面存储过程的每个部分都运行良好。存储过程最初只是运行的insert语句。带有select/delete的CTE本身也运行良好 我将CTE with delete语句添加到存储过程中,以删除重复项,这样我就可以在开发过程中根据需要运行,而不会在后续处理中获得重复项 CREATE PROCEDURE db.sproc_name(@data nvarchar(max)) AS BEGIN DECLARE @doc AS INT EXEC sp_xm

正在运行SQLServer2008。下面存储过程的每个部分都运行良好。存储过程最初只是运行的insert语句。带有select/delete的CTE本身也运行良好

我将CTE with delete语句添加到存储过程中,以删除重复项,这样我就可以在开发过程中根据需要运行,而不会在后续处理中获得重复项

CREATE PROCEDURE db.sproc_name(@data nvarchar(max))
AS
BEGIN
    DECLARE @doc AS INT
    EXEC sp_xml_preparedocument @doc OUTPUT, @data

    INSERT INTO db.the_table
        SELECT * 
        FROM openxml(@doc, '/XPATH_STRING', 1) 
        WITH db.the_table

    ;WITH cte AS
    (
        SELECT
            *, ROW_NUMBER() OVER (PARTITION BY DATE, CODE ORDER BY DATE) AS rn
        FROM
            db.the_table
    )
    DELETE FROM cte 
    WHERE rn > 1
END
运行create语句时出现以下错误:

15:51:16[错误代码…]在“表”附近的语法不正确。
15:51:16[错误代码…]靠近“end”的语法不正确。
... 已执行2条语句,0行受影响,执行/获取时间: 0.005/0.000秒[0成功,2错误]


编辑以删除标识符中的引号。

标识符的
引号是开还是关?您是否在
创建过程[db].[sproc\u name]
中遇到同样的问题?我不知道这是一个选项。它已关闭,但删除引号无法解决问题,也无法打开它。在此处创建时没有语法问题。执行的“2条语句”是什么?您使用的是什么客户端工具?(SMSS、SQLCMD、其他)。它报告执行了两条语句,但
create…
是唯一将执行的语句。看起来存储过程在分号处被破坏,并作为两个单独的批传送到SQL Server。第一个语法错误是因为第一批缺少结束
end
。第二个语法错误是
end
没有
begin
;(分号)是否在SSMS中配置为批次分隔符?