Giovanni Mosquera
Giovanni Mosquera

Reputation: 126

How to debug a SQL Server stored procedure

I have the following SQL Server stored procedure:

USE [Forsa]
GO

/****** Object:  StoredProcedure [dbo].[USP_fup_UPD_hvp_Observaciones]    Script Date: 20/10/2022 23:34:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[USP_fup_UPD_hvp_Observaciones]
    (@pFupID int,
     @pVersion varchar(2),
     @pTipoEntrada int,
     @pUsuario varchar(50),
     @pEstado varchar(50),
     @pCons int,
     @pPadre int,
     @pTitulo Varchar(50),
     @pComentario varchar(max) = '',
     @pFecDespacho Date = NULL,
     @pFecEntrega Date = NULL,
     @pTipoConsideracionObservacion int  = 0,
     @pAreaSolicitada varchar (50) = '',
     @pSolucionadoEnObra int =0 ,
     @pGeneroCosto int = 0,
     @pDebugVar int = 0)
AS
BEGIN
    SET NOCOUNT ON
   
    BEGIN TRY
    BEGIN TRAN
        IF @pCons = -1
        BEGIN
            SELECT @pCons = ISNULL(MAX(eecc_consecutivo), 0) + 1 
            FROM fup_enc_ent_ControlCambios cc
            INNER JOIN fup_enc_entrada_cotizacion ec ON  CC.eecc_enc_entrada_cot_id = EC.eect_id
            WHERE ec.eect_fup_id = @pFupID
              AND ec.eect_vercot_id = @pVersion
        END

        MERGE fup_hvp_Observaciones AS cc
        USING (SELECT DISTINCT 
                   ece.eect_id, @pUsuario usu, 
                   CASE WHEN LEN(@pEstado) > 2 THEN @pEstado ELSE ep.[ep_desc_estado] END estado, @pTitulo Titulo,
                   @pComentario comentario, @pCons Consecutivo, @pPadre Padre, Getdate() Fecha,
                   @pTipoEntrada TipoEntrada, @pFecDespacho FecDespacho, @pFecEntrega FecEntrega,
                   @pTipoConsideracionObservacion TipoConsideracionObservacion,
                   @pAreaSolicitada AreaSolicitada, @pSolucionadoEnObra SolucionadoEnObra,
                   @pGeneroCosto GeneroCosto
               FROM 
                   fup_enc_entrada_cotizacion ece 
               LEFT OUTER JOIN 
                   fup_acta_seguimiento ac ON ac.actseg_fup_id = ece.eect_fup_id 
                                           AND ac.actseg_version = ece.eect_vercot_id
               LEFT OUTER JOIN  
                   fup_estado_proceso ep ON ece.eect_estado_proc = ep.ep_id
               WHERE 
                   ece.eect_fup_id = @pFupID
                   AND ece.eect_vercot_id = @pVersion) AS s
                ON (cc.hvpo_enc_entrada_cot_id = s.eect_id AND cc.hvpo_consecutivo = s.Consecutivo )

            WHEN NOT MATCHED THEN INSERT 
                   ([hvpo_enc_entrada_cot_id] ,[hvpo_consecutivo] ,[hvpo_Padre] ,[hvpo_EstadoFup]
                   ,[hvpo_Titulo] ,[hvpo_Comentario] ,[hvpo_UsuaActualiza] ,[hvpo_FecActualiza]
                   ,[hvpo_FecDespacho] ,[hvpo_FecEntrega] ,[hvpo_TipoEntrada]
                   ,[hvpo_TipoConsideracionObservacion] ,[hvpo_AreaSolicitada]
                   ,[hvpo_SolucionadoEnObra] ,[hvpo_GeneroCosto])
                 VALUES
                    (s.eect_id, s.Consecutivo, s.Padre,  s.estado, s.Titulo, s.comentario, s.usu, Fecha,  
                    s.FecDespacho, s.FecEntrega, s.TipoEntrada, s.TipoConsideracionObservacion,
                    s.AreaSolicitada, s.SolucionadoEnObra ,s.GeneroCosto);
                    
            
        COMMIT;
    END TRY     
    BEGIN CATCH
            ROLLBACK;
            INSERT INTO errores
            SELECT
                 GETDATE()
                ,ERROR_NUMBER() AS ErrorNumber
                ,ERROR_PROCEDURE() AS ErrorProcedure
                ,ERROR_LINE() AS ErrorLine
                ,ERROR_MESSAGE() AS ErrorMessage
                
    END CATCH;
END

Ok, what I want to do and don't how, it's in the line of ON (cc.hvpo_enc_entrada_cot_id = s.eect_id AND cc.hvpo_consecutivo = s.Consecutivo )

I tried placing a PRINT and RETURN statement just after the WHEN NOT MATCHED statement and the code throws a syntax error. I just want to know the values of that variables when the stored procedure takes place

Upvotes: 0

Views: 74

Answers (1)

Steve Ford
Steve Ford

Reputation: 7753

First of all you can't put PRINT statements in the middle of another statement (the Merge), you can however specify an OUTPUT Clause:

MERGE fup_hvp_Observaciones AS cc
USING (SELECT DISTINCT 
           ece.eect_id, @pUsuario usu, 
           CASE WHEN LEN(@pEstado) > 2 THEN @pEstado ELSE ep.[ep_desc_estado] END estado, @pTitulo Titulo,
           @pComentario comentario, @pCons Consecutivo, @pPadre Padre, Getdate() Fecha,
           @pTipoEntrada TipoEntrada, @pFecDespacho FecDespacho, @pFecEntrega FecEntrega,
           @pTipoConsideracionObservacion TipoConsideracionObservacion,
           @pAreaSolicitada AreaSolicitada, @pSolucionadoEnObra SolucionadoEnObra,
           @pGeneroCosto GeneroCosto
       FROM 
           fup_enc_entrada_cotizacion ece 
       LEFT OUTER JOIN 
           fup_acta_seguimiento ac ON ac.actseg_fup_id = ece.eect_fup_id 
                                   AND ac.actseg_version = ece.eect_vercot_id
       LEFT OUTER JOIN  
           fup_estado_proceso ep ON ece.eect_estado_proc = ep.ep_id
       WHERE 
           ece.eect_fup_id = @pFupID
           AND ece.eect_vercot_id = @pVersion) AS s
        ON (cc.hvpo_enc_entrada_cot_id = s.eect_id AND cc.hvpo_consecutivo = s.Consecutivo )

    WHEN NOT MATCHED THEN INSERT 
           ([hvpo_enc_entrada_cot_id] ,[hvpo_consecutivo] ,[hvpo_Padre] ,[hvpo_EstadoFup]
           ,[hvpo_Titulo] ,[hvpo_Comentario] ,[hvpo_UsuaActualiza] ,[hvpo_FecActualiza]
           ,[hvpo_FecDespacho] ,[hvpo_FecEntrega] ,[hvpo_TipoEntrada]
           ,[hvpo_TipoConsideracionObservacion] ,[hvpo_AreaSolicitada]
           ,[hvpo_SolucionadoEnObra] ,[hvpo_GeneroCosto])
         VALUES
            (s.eect_id, s.Consecutivo, s.Padre,  s.estado, s.Titulo, s.comentario, s.usu, Fecha,  
            s.FecDespacho, s.FecEntrega, s.TipoEntrada, s.TipoConsideracionObservacion,
            s.AreaSolicitada, s.SolucionadoEnObra ,s.GeneroCosto)
OUTPUT
   $action,
   deleted.*,
   inserted.*;

The $action will be one of 'INSERT', 'UPDATE' or 'DELETE

Upvotes: 1

Related Questions