Misschien wilt u beginnen met het gebruik van PROBEER..CATCH blokkade in uw procedures
Uw procedure kan dus worden herschreven als:
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
Houd er ook rekening mee dat u een enkele verwijderopdracht uitvoert. Het betekent dat het niet in een transactie hoeft te worden verpakt. Dit vraag legt uit waarom.
Uw code wordt dit:
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
Waarom nu uw @errMessage
is altijd NULL? Omdat ERROR_MESSAGE()
is ALLEEN geldig IN VANGBLOK. Dat staat in documentatie
:
TRY..CATCH gebruiken in Transact-SQL vertelt dit: