0
我在想,爲什麼SQL Server在執行過程中的動態SQL時無法執行error_procedure。我可以在方案2的錯誤消息中調用過程名稱?在執行錯誤時獲取存儲過程名稱動態SQL
方案1:
CREATE PROCEDURE [dbo].[TEST_PROCEDURE]
AS
BEGIN
EXEC SELECT 1/0
END
GO
EXEC TEST_PROCEDURE
錯誤消息:
消息8134,級別16,狀態1,過程TEST_PROCEDURE,第6行
除以零誤差遇到。
方案2:
CREATE PROCEDURE [dbo].[TEST_PROCEDURE]
AS
BEGIN
EXEC('SELECT 1/0')
END
GO
EXEC TEST_PROCEDURE
錯誤消息:
消息8134,級別16,狀態1,行1
除以零錯誤遇到。
呃,你的第一種情況是在創建過程時出錯,因爲你沒有正確的語法。 EXEC執行存儲過程(沒有存儲過程「SELECT」)。 EXEC()執行你放入括號內的任何參數。要使用過程名稱輸出自定義錯誤消息,請將TRY CATCH語句放入您的過程中,並將自定義錯誤消息放入您的CATCH中。 – ZLK
感謝您的回覆!是的,我發現我可以使用TRY CATCH機制來獲得場景2中的過程。除此之外,還有其他方法嗎? – 0070
沒有其他選擇。 TRY CATCH是捕獲特定錯誤信息的唯一方式。另請注意,如果您在存儲過程中執行某些操作,SQL可能會提供有關錯誤的誤導性信息。例如如果你有100行代碼,然後在第101行添加'EXEC('SELECT 1/0')',它會說第1行有錯誤(因爲這是正在執行的代碼的第一行)。 – ZLK