私はTry...Catch
を習得しようとしているので、このサンプルはMSから提供されています。私は文法と出力を理解していますが(ほとんどの場合)、質問は1つあります:TRY..CATCH Error_Line()....行
出力にError_Lineが「4」と表示されます。これは問題ありませんが、GO
とBEGIN TRY
の間で改行を削除すると、Error_Lineが '3'と表示されます。私はちょうどここの論理を理解したい。
私が想像していることは、SQL ServerがGO
の直後にバッチを開始することによって行を数えていることです。たとえその行が空白であっても、確かにこれを知らないのです。誰でも明確にすることはできますか?そのような理論が正しい場合、このような改行でスクリプトが書かれていれば、エラーを見つけるのが難しくなりませんか?
-- Verify that the stored procedure does not already exist.
IF OBJECT_ID ('usp_GetErrorInfo', 'P') IS NOT NULL
DROP PROCEDURE usp_GetErrorInfo;
GO
-- Create procedure to retrieve error information.
CREATE PROCEDURE usp_GetErrorInfo
AS
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
GO
--Line 1
BEGIN TRY --Line 2
-- Generate divide-by-zero error. --Line 3
SELECT 1/0; --Line 4
END TRY
BEGIN CATCH
-- Execute error retrieval routine.
EXECUTE usp_GetErrorInfo;
END CATCH;
エラーラインが必ずしも正確なラインになるとは限りません。それは単に声明の始まりかもしれない。ステートメントが複数の行にまたがる場合 – scsimon
[実際のストアドプロシージャ行番号をエラーメッセージから取得するにはどうすればよいですか?](https://stackoverflow.com/questions/4565614/how-can-i-get-the-actual-stored-procedure-行番号エラーメッセージから) – pcdev