0
我已經在這個形式的存儲過程:爲什麼這個SQL解析器執行這個非法語法?
ALTER PROCEDURE [dbo].[fooBar]
(
)
AS
BEGIN
-- etc
RETURN @Success
END
它已經完全在它BEGIN
和END
前工作,但改變的東西,恢復回來後,就拒絕執行,指着一個語法錯誤在最後的END
(刪除下一個指向過程中第一個IF/BEGIN/....語句的語法錯誤,從而開始你的瘋狂追逐)。
查看MSDN official documentation的語法,BEGIN
和END
用於這種方式來封裝存儲過程是非法的。 (刪除BEGIN
和END
解決了這個問題)
問題:爲什麼會發生這種情況?
編譯器跳過這個BEGIN
和END
最初是否會發現它?有一些SQL編譯器忽略的東西嗎?是遺產嗎?它只是挑剔嗎?我是否缺少修補程序?
這是SQL Server 10.50.1617
BEGIN和END對劃分過程不是非法的:一個或多個Transact-SQL語句組成過程的主體。您可以使用可選的BEGIN和END關鍵字來包含這些語句。它們是可選的,但不是非法的...... – Sparky
'BEGIN'和'END'在許多語言中相當於'{'和'}'。如果你真的想,你可以在每一個單獨的陳述中放置BEGIN和END。 – MatBailie
在所有可能的情況下,您還有其他不匹配的BEGIN/END元素,以至於只有當解析器到達文件末尾時纔會捕獲內部錯誤,然後才意識到出現了錯誤。在Java/C#中有一個太多的{大括號。 – jklemmack