Du vil måske begynde at bruge TRY..CATCH blokere dine procedurer
Så din procedure kunne omskrives som:
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
Bemærk også, at du kører som enkelt slette-erklæring. Det betyder, at det ikke behøver at blive pakket ind i en transaktion. Dette spørgsmål forklarer hvorfor.
Din kode bliver denne:
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
Hvorfor nu din @errMessage
er altid NULL? Fordi ERROR_MESSAGE()
er KUN gyldig I FANGSTBLOK. Det er skrevet i dokumentation
:
Brug af TRY..CATCH i Transact-SQL fortæller dette: