Wpis z mikrobloga

Załóżmy że mam coś takiego:

ALTER PROCEDURE [dbo].[bookConDay]
        -- Add the parameters for the stored procedure here
        @client_id 
int
        @conferenceDay_id 
int,
        @placesReserved 
int --need to be checked if enough places are available
AS
BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        
SET NOCOUNT ON;
``````
                
BEGIN TRANSACTION [Tran1]
                
BEGIN TRY
                        
INSERT INTO dbo.ConferenceDayBooking
                        (
                                client_id,
                                conferenceDay_id,
                                placesReserved,
                                cancelled,
                                bookingDate,
                                payment_id --deafault NULL
                        )
                        
VALUES
                        (
                                @client_id,
                                @conferenceDay_id,
                                @placesReserved,
                                0,
                                GETDATE(),
                                
NULL
                        )

KOLEJNE INSERTY
                
COMMIT TRANSACTION [Tran1]
                
END TRY
                
BEGIN CATCH
                        
ROLLBACK TRANSACTION [Tran2]
                        
DECLARE @ErrorMessage NVARCHAR(max);
                        
SELECT @ErrorMessage = ERROR_MESSAGE()
                        RAISERROR(@ErrorMessage,1,1)
                
END CATCH

I teraz załóżmy że jak będę wrzucał do dbo.ConferenceDayBooking to wywołam trigger który wywoła ROLLBACK. Czy KOLEJNE INSERTY zostaną wykonane? Czy transakcja zostanie przerwana ?

Korzystam z MS SQL.
#sql #mssql
  • 2
  • Odpowiedz
@M4ks: Dzięki za odpowiedź! A jak zrobie RAISERROR w triggerze to rozumiem że Catch w transakcji mi to przechwyci i cofnie całą transakcję?
  • Odpowiedz