为什么SQL解析器会执行这种非法语法?

时间:2011-12-08 22:22:58

标签: sql compiler-construction

我有这种形式的存储过程:

ALTER PROCEDURE [dbo].[fooBar]
(
)
AS
BEGIN
-- etc
RETURN  @Success
END

之前它曾与BEGINEND完美配合,但在更改了某些内容并将其还原后,它拒绝执行,指向上一个{{1}的语法错误(删除下一个指向程序内第一个IF / BEGIN / ....语句的语法错误,从而开始你的野鹅追逐)。

查看MSDN official documentation的语法,ENDBEGIN以这种方式封装存储过程是非法的。 (删除ENDBEGIN解决了问题)

问题:为什么会这样?

编译器是否最初跳过此ENDBEGIN并稍后发现它?是否有一些SQL编译器忽略的东西?这是遗产吗?它只是挑剔吗?我错过了修补程序吗?

这是END

1 个答案:

答案 0 :(得分:1)

BEGIN / END对存储过程完全有效。这在您链接到的文档页面的语法中明确设置。

这是不允许的括号。