Sql 使用CTE时存储过程创建失败
正在运行SQLServer2008。下面存储过程的每个部分都运行良好。存储过程最初只是运行的insert语句。带有select/delete的CTE本身也运行良好 我将CTE with delete语句添加到存储过程中,以删除重复项,这样我就可以在开发过程中根据需要运行,而不会在后续处理中获得重复项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
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中配置为批次分隔符?