TRY..CATCH の使用を開始することをお勧めします。 手順でブロック
したがって、手順は次のように書き換えることができます:
CREATE PROCEDURE spTest_Delete @ID INT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION
DELETE
FROM Test
WHERE ID = @ID;
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
SELECT ERROR_NUMBER(), ERROR_MESSAGE();
END CATCH
END
また、単一の削除ステートメントとして実行していることに注意してください。これは、トランザクションにラップする必要がないことを意味します。 これ 質問は理由を説明します
コードは次のようになります:
CREATE PROCEDURE spTest_Delete @ID INT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
DELETE
FROM Test
WHERE ID = @ID;
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER(), ERROR_MESSAGE();
END CATCH
END
なぜあなたの @errMessage
は常に NULL ですか? ERROR_MESSAGE()
のため は CATCH ブロックでのみ有効です。 ドキュメント
に書かれています :
Transact-SQL での TRY..CATCH の使用 これを伝えます: