Debug Proc in database sql server 2014

2

I use Sql Server 2014. I am having problems in Stored procedure, because when running with certain filters, I get this error:

  

Message 512, Level 16, State 1, Procedure   SP_CMO_SEL_PORTARIA_INATIVOS, Line 485 Subquery returned more than 1   value. This is not permitted when the subquery follows =,! =, & Lt ;, < =, > & gt ;, > = or when the subquery is used as an expression.

By error, you can see that a subquery is returning more than one record and this can be a malformed Where and etc ...

As I do for when I run this proc, I can stop right in the error line. There it says line 485, but when going to line 485, it seems that everything is ok and can be higher up and came burst in this line a mistake that happened before, I do not know, I do not know if this is possible.

I did as my colleague Ismael advised and returned it to me:

  

Err #: 512 | Severity: 16 | Condition: 1 | Procedure:   SP_CMO_SEL_PORTARIA_INATIVOS | Line: 389 | Error: Subquery returned   more than 1 value. This is not permitted when the subquery follows =,   ! =, & lt ;, < =, & gt ;, > = or when the subquery is used as an expression.   Message 50000, Level 1, State 16

Only line 389 has nothing on it, it is blank and it is on BEGIN TRY .

My Proc code block looks like this:

........
BEGIN TRY
                            IF @ID_XFC_GRP <> '' OR @ID_XFC_Inicial <> 0
                                BEGIN
                                    SELECT  #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_UNI_EMP,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.RAM_ATV,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DT_LAU_PER,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DT_NASC_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_MAE_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.IR_SEX_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SUS_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_RG_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_CPF_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DS_END,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_CID_END, 
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.SG_UF_END,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_FUN_ULT, 
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_SET_ULT,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.ID_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.ID_PER_CPC_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.DT_ADM_PER_CPC_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.DT_DMS_PER_CPC_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_PER_FUN_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_EMP,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_UNI_EMP,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_SET_UNI,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.NM_SET_UNI, 
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.NM_FUN,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DT_INI_PER_FUN_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DT_FNL_PER_FUN_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DS_MAT_CTO,
                                            isNull( OIT1980LEITURA.DT_RX, EXAME_RAIOX.DT_EXM_REA ) DT_RX,
                                            OIT1980LEITURA.RX_NUM,
                                            EXAME_RAIOX.DS_OBS_EXM_REA AS DS_RAIOX,
                                            ESPIROMETRIA.CVF_PRE, 
                                            ESPIROMETRIA.CVF_MED, 
                                            Replace(Cast(ESPIROMETRIA.CVF_POR as varchar(7)), '.', ',') as CVF_POR,  
                                            ESPIROMETRIA.CVF_LMT,  
                                            ESPIROMETRIA.VEF_PRE,  
                                            ESPIROMETRIA.VEF_MED,
                                            Replace(Cast(ESPIROMETRIA.VEF_POR as varchar(7)), '.', ',') as VEF_POR,  
                                            ESPIROMETRIA.VEF_LMT,
                                            ESPIROMETRIA.VEF_CVF_PRE, 
                                            ESPIROMETRIA.VEF_CVF_MED, 
                                            ESPIROMETRIA.VEF_CVF_POR, 
                                            ESPIROMETRIA.VEF_CVF_LMT,
                                            ESPIROMETRIA.FEF_PRE,  
                                            ESPIROMETRIA.FEF_MED, 
                                            Replace(Cast(ESPIROMETRIA.FEF_POR as varchar(7)),'.', ',') as FEF_POR,
                                            ESPIROMETRIA.FEF_LMT,
                                            EXAME.DS_OBS_EXM_REA AS DS_ESPIROMETRIA,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DS_DTLH_CLSS,
                                            CIDADE_UNIDADE.NM_CID_END AS CIDADE 
                                            , EXAME.DT_EXM_REA DT_EXA_EXP
                                            , NM_EMP,
                                            (   Select NO_TEL_UNI_EMP From t_cmo_unidade
                                                Where ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP ) Telefone,
                                            (   Select DS_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) Endereco,
                                            (   Select NM_BRR_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) Bairro,
                                            (   Select CD_CEP From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) CEP,
                                            (   Select NM_CID_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) Cidade,
                                            (   Select SG_UF_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) UF

                                       FROM #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO 
                                            LEFT OUTER JOIN #T_SP_CMO_SEL_REL_FICHA_ADMISSAO    
                                            ON #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC = #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.ID_XFC

                                            LEFT OUTER JOIN #T_SP_CMO_SEL_REL_FICHA_FUNCAO
                                            ON #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC = #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_XFC

                                            LEFT OUTER JOIN T_CMO_OIT1980_LEITURA OIT1980LEITURA
                                            ON OIT1980LEITURA.ID_OIT_LET = 1
                                            AND OIT1980LEITURA.ID_OIT = (SELECT ID_OIT FROM T_CMO_OIT1980 
                                                                                WHERE ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                                            WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                                            AND   ID_EXM = 3936     
                                                                                                                            AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0)--NO_SEQ_AVA_LAU_PER, para filtro por avaliação  
                                                                                                    )
                                                                    )           
                                            LEFT OUTER JOIN T_CMO_EXAME_REALIZADO AS EXAME_RAIOX
                                                                                     ON  EXAME_RAIOX.NO_SEQ_AVA_LAU_PER = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER     
                                                                                     AND EXAME_RAIOX.ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC 
                                                                                     AND EXAME_RAIOX.ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                                                          WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                                                          AND   ID_EXM = 3936       
                                                                                                                                          AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0)--NO_SEQ_AVA_LAU_PER, para filtro por avaliação    
                                                                                                                    )
                                            LEFT OUTER JOIN T_CMO_ESPIROMETRIA ESPIROMETRIA
                                                             ON  ESPIROMETRIA.ID_EXP = (SELECT ID_EXP FROM T_CMO_ESPIROMETRIA
                                                                                                      WHERE ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                                                                    WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                                                                    AND   (ID_EXM = 1514 OR ID_EXM = 3136)
                                                                                                                                                    AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0) --NO_SEQ_AVA_LAU_PER, para filtro por avaliação
                                                                                                                            )
                                                                                        )       
                                            --PARA PEGAR A OBS DA ESPIROMETRIA
                                            LEFT OUTER JOIN T_CMO_EXAME_REALIZADO AS EXAME
                                            ON  EXAME.NO_SEQ_AVA_LAU_PER = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER
                                            AND EXAME.ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC        
                                            AND EXAME.ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                            WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                            AND   (ID_EXM = 1514 OR ID_EXM = 3136)
                                                                                                            AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0) --NO_SEQ_AVA_LAU_PER, para filtro por avaliação
                                                                                    )                                       
                                            left outer join T_CMO_ENDERECO AS CIDADE_UNIDADE
                                                ON  CIDADE_UNIDADE.id_emp = @ID_EMP 
                                                and CIDADE_UNIDADE.id_uni_emp = @ID_UNI_EMP
                                                and CIDADE_UNIDADE.IR_TIP_END = 'U'

                                     WHERE  #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP = @ID_EMP
                                        AND #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP = @ID_UNI_EMP
                                        AND #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC in(SELECT ID_XFC FROM #FUNCIONARIOS_INATIVOS)

                                        --AND YEAR(EXAME.DT_EXM_REA) BETWEEN @DT_DE_LAUDO AND @DT_ATE_LAUDO

                                        ORDER BY #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC,
                                                 #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.DT_ADM_PER_CPC_XFC,
                                                 #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DT_INI_PER_FUN_XFC

                                END
                            ELSE 
                                BEGIN
                                    SELECT  #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_UNI_EMP,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.RAM_ATV,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DT_LAU_PER,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DT_NASC_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_MAE_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.IR_SEX_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SUS_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_RG_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_CPF_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DS_END,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_CID_END, 
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.SG_UF_END,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_FUN_ULT, 
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_SET_ULT,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.ID_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.ID_PER_CPC_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.DT_ADM_PER_CPC_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.DT_DMS_PER_CPC_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_PER_FUN_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_EMP,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_UNI_EMP,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_SET_UNI,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.NM_SET_UNI, 
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.NM_FUN,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DT_INI_PER_FUN_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DT_FNL_PER_FUN_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DS_MAT_CTO,
                                            OIT1980LEITURA.DT_RX,
                                            OIT1980LEITURA.RX_NUM,
                                            EXAME_RAIOX.DS_OBS_EXM_REA AS DS_RAIOX,
                                            ESPIROMETRIA.CVF_PRE, 
                                            ESPIROMETRIA.CVF_MED, 
                                            Replace(Cast(ESPIROMETRIA.CVF_POR as varchar(7)), '.', ',') as CVF_POR,  
                                            ESPIROMETRIA.CVF_LMT,  
                                            ESPIROMETRIA.VEF_PRE,  
                                            ESPIROMETRIA.VEF_MED,
                                            Replace(Cast(ESPIROMETRIA.VEF_POR as varchar(7)), '.', ',') as VEF_POR,  
                                            ESPIROMETRIA.VEF_LMT,
                                            ESPIROMETRIA.VEF_CVF_PRE, 
                                            ESPIROMETRIA.VEF_CVF_MED, 
                                            ESPIROMETRIA.VEF_CVF_POR, 
                                            ESPIROMETRIA.VEF_CVF_LMT,
                                            ESPIROMETRIA.FEF_PRE,  
                                            ESPIROMETRIA.FEF_MED, 
                                            Replace(Cast(ESPIROMETRIA.FEF_POR as varchar(7)),'.', ',') as FEF_POR,
                                            ESPIROMETRIA.FEF_LMT,
                                            EXAME.DS_OBS_EXM_REA AS DS_ESPIROMETRIA,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DS_DTLH_CLSS,
                                            CIDADE_UNIDADE.NM_CID_END AS CIDADE 
                                            , EXAME.DT_EXM_REA DT_EXA_EXP
                                            , NM_EMP,
                                            (   Select NO_TEL_UNI_EMP From t_cmo_unidade
                                                Where ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP ) Telefone,
                                            (   Select DS_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) Endereco,
                                            (   Select NM_BRR_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) Bairro,
                                            (   Select CD_CEP From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) CEP,
                                            (   Select NM_CID_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) Cidade,
                                            (   Select SG_UF_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) UF

                                       FROM #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO 
                                            LEFT OUTER JOIN #T_SP_CMO_SEL_REL_FICHA_ADMISSAO    
                                            ON #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC = #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.ID_XFC

                                            LEFT OUTER JOIN #T_SP_CMO_SEL_REL_FICHA_FUNCAO
                                            ON #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC = #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_XFC

                                            LEFT OUTER JOIN T_CMO_OIT1980_LEITURA OIT1980LEITURA
                                            ON OIT1980LEITURA.ID_OIT_LET = 1
                                            AND OIT1980LEITURA.ID_OIT = (SELECT ID_OIT FROM T_CMO_OIT1980 
                                                                                WHERE ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                                            WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                                            AND   ID_EXM = 3936     
                                                                                                                            AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0)--NO_SEQ_AVA_LAU_PER, para filtro por avaliação  
                                                                                                    )
                                                                    )           
                                            LEFT OUTER JOIN T_CMO_EXAME_REALIZADO AS EXAME_RAIOX
                                                                                     ON  EXAME_RAIOX.NO_SEQ_AVA_LAU_PER = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER     
                                                                                     AND EXAME_RAIOX.ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC 
                                                                                     AND EXAME_RAIOX.ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                                                          WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                                                          AND   ID_EXM = 3936       
                                                                                                                                          AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0)--NO_SEQ_AVA_LAU_PER, para filtro por avaliação    
                                                                                                                    )
                                            LEFT OUTER JOIN T_CMO_ESPIROMETRIA ESPIROMETRIA
                                                             ON  ESPIROMETRIA.ID_EXP = (SELECT ID_EXP FROM T_CMO_ESPIROMETRIA
                                                                                                      WHERE ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                                                                    WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                                                                    AND   (ID_EXM = 1514 OR ID_EXM = 3136)
                                                                                                                                                    AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0) --NO_SEQ_AVA_LAU_PER, para filtro por avaliação
                                                                                                                            )
                                                                                        )       
                                            --PARA PEGAR A OBS DA ESPIROMETRIA
                                            LEFT OUTER JOIN T_CMO_EXAME_REALIZADO AS EXAME
                                            ON  EXAME.NO_SEQ_AVA_LAU_PER = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER
                                            AND EXAME.ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC        
                                            AND EXAME.ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                            WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                            AND   (ID_EXM = 1514 OR ID_EXM = 3136)
                                                                                                            AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0) --NO_SEQ_AVA_LAU_PER, para filtro por avaliação
                                                                                    )                                       
                                             left outer join T_CMO_ENDERECO AS CIDADE_UNIDADE
                                                ON  CIDADE_UNIDADE.id_emp = @ID_EMP 
                                                and CIDADE_UNIDADE.id_uni_emp = @ID_UNI_EMP
                                                and CIDADE_UNIDADE.IR_TIP_END = 'U'

                                     WHERE  #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP = @ID_EMP
                                        AND #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP = @ID_UNI_EMP
                                        AND #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC  IN (SELECT ID_XFC FROM #FUNCIONARIOS_INATIVOS)
                                        --AND EXISTS(SELECT ID_XFC FROM #T_SP_CMO_SEL_REL_FICHA_ADMISSAO 
                                                                --WHERE #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.DT_ADM_PER_CPC_XFC < @DT_ADM
                                                            --AND #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC       
                                                                    --)

                                        --AND YEAR(EXAME.DT_EXM_REA) BETWEEN @DT_DE_LAUDO AND @DT_ATE_LAUDO

                                        ORDER BY #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC,
                                                 #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.DT_ADM_PER_CPC_XFC,
                                                 #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DT_INI_PER_FUN_XFC
                                END
                            END TRY
                            BEGIN CATCH

                                DECLARE @_ERROR_PROCEDURE VARCHAR(MAX)
                                SET @_ERROR_PROCEDURE = 'Err Nº: ' + CAST(ERROR_NUMBER() AS VARCHAR(10)) +
                                     ' | Severidade: '+ CAST(ERROR_SEVERITY() AS VARCHAR(10)) +
                                     ' | Estado: ' + CAST(ERROR_STATE() AS VARCHAR(10)) +
                                     ' | Procedure: '+ ISNULL(ERROR_PROCEDURE(),'') +
                                     ' | Linha: '+ CAST(ERROR_LINE() AS VARCHAR(10)) +
                                     ' | Erro: '+ ERROR_MESSAGE()

                                RAISERROR(@_ERROR_PROCEDURE,1,16)

                            END CATCH
........

I've set a variable of type int like this:

declare 
@Contador int = 0

IF @ID_XFC_GRP <> '' OR @ID_XFC_Inicial <> 0
                                BEGIN
                                set @Contador = 8
                                    SELECT  #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_UNI_EMP,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.RAM_ATV,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DT_LAU_PER,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DT_NASC_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_MAE_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.IR_SEX_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SUS_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_RG_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_CPF_XFC,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DS_END,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_CID_END, 
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.SG_UF_END,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_FUN_ULT, 
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NM_SET_ULT,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.ID_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.ID_PER_CPC_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.DT_ADM_PER_CPC_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.DT_DMS_PER_CPC_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_PER_FUN_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_EMP,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_UNI_EMP,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_SET_UNI,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.NM_SET_UNI, 
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.NM_FUN,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DT_INI_PER_FUN_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DT_FNL_PER_FUN_XFC,
                                            #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DS_MAT_CTO,
                                            isNull( OIT1980LEITURA.DT_RX, EXAME_RAIOX.DT_EXM_REA ) DT_RX,
                                            OIT1980LEITURA.RX_NUM,
                                            EXAME_RAIOX.DS_OBS_EXM_REA AS DS_RAIOX,
                                            ESPIROMETRIA.CVF_PRE, 
                                            ESPIROMETRIA.CVF_MED, 
                                            Replace(Cast(ESPIROMETRIA.CVF_POR as varchar(7)), '.', ',') as CVF_POR,  
                                            ESPIROMETRIA.CVF_LMT,  
                                            ESPIROMETRIA.VEF_PRE,  
                                            ESPIROMETRIA.VEF_MED,
                                            Replace(Cast(ESPIROMETRIA.VEF_POR as varchar(7)), '.', ',') as VEF_POR,  
                                            ESPIROMETRIA.VEF_LMT,
                                            ESPIROMETRIA.VEF_CVF_PRE, 
                                            ESPIROMETRIA.VEF_CVF_MED, 
                                            ESPIROMETRIA.VEF_CVF_POR, 
                                            ESPIROMETRIA.VEF_CVF_LMT,
                                            ESPIROMETRIA.FEF_PRE,  
                                            ESPIROMETRIA.FEF_MED, 
                                            Replace(Cast(ESPIROMETRIA.FEF_POR as varchar(7)),'.', ',') as FEF_POR,
                                            ESPIROMETRIA.FEF_LMT,
                                            EXAME.DS_OBS_EXM_REA AS DS_ESPIROMETRIA,
                                            #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.DS_DTLH_CLSS,
                                            CIDADE_UNIDADE.NM_CID_END AS CIDADE 
                                            , EXAME.DT_EXM_REA DT_EXA_EXP
                                            , NM_EMP,
                                            (   Select NO_TEL_UNI_EMP From t_cmo_unidade
                                                Where ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP ) Telefone,
                                            (   Select DS_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) Endereco,
                                            (   Select NM_BRR_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) Bairro,
                                            (   Select CD_CEP From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) CEP,
                                            (   Select NM_CID_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) Cidade,
                                            (   Select SG_UF_END From t_cmo_endereco 
                                                Where IR_TIP_END = 'U' and ID_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP and ID_UNI_EMP = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP    ) UF

                                       FROM #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO 
                                            LEFT OUTER JOIN #T_SP_CMO_SEL_REL_FICHA_ADMISSAO    
                                            ON #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC = #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.ID_XFC

                                            LEFT OUTER JOIN #T_SP_CMO_SEL_REL_FICHA_FUNCAO
                                            ON #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC = #T_SP_CMO_SEL_REL_FICHA_FUNCAO.ID_XFC

                                            LEFT OUTER JOIN T_CMO_OIT1980_LEITURA OIT1980LEITURA
                                            ON OIT1980LEITURA.ID_OIT_LET = 1
                                            AND OIT1980LEITURA.ID_OIT = (SELECT ID_OIT FROM T_CMO_OIT1980 
                                                                                WHERE ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                                            WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                                            AND   ID_EXM = 3936     
                                                                                                                            AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0)--NO_SEQ_AVA_LAU_PER, para filtro por avaliação  
                                                                                                    )
                                                                    )           
                                            LEFT OUTER JOIN T_CMO_EXAME_REALIZADO AS EXAME_RAIOX
                                                                                     ON  EXAME_RAIOX.NO_SEQ_AVA_LAU_PER = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER     
                                                                                     AND EXAME_RAIOX.ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC 
                                                                                     AND EXAME_RAIOX.ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                                                          WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                                                          AND   ID_EXM = 3936       
                                                                                                                                          AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0)--NO_SEQ_AVA_LAU_PER, para filtro por avaliação    
                                                                                                                    )
                                            LEFT OUTER JOIN T_CMO_ESPIROMETRIA ESPIROMETRIA
                                                             ON  ESPIROMETRIA.ID_EXP = (SELECT ID_EXP FROM T_CMO_ESPIROMETRIA
                                                                                                      WHERE ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                                                                    WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                                                                    AND   (ID_EXM = 1514 OR ID_EXM = 3136)
                                                                                                                                                    AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0) --NO_SEQ_AVA_LAU_PER, para filtro por avaliação
                                                                                                                            )
                                                                                        )       
                                            --PARA PEGAR A OBS DA ESPIROMETRIA
                                            LEFT OUTER JOIN T_CMO_EXAME_REALIZADO AS EXAME
                                            ON  EXAME.NO_SEQ_AVA_LAU_PER = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER
                                            AND EXAME.ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC        
                                            AND EXAME.ID_EXM_REA = (SELECT MAX(ID_EXM_REA) FROM T_CMO_EXAME_REALIZADO
                                                                                                            WHERE ID_XFC = #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC
                                                                                                            AND   (ID_EXM = 1514 OR ID_EXM = 3136)
                                                                                                            AND   NO_SEQ_AVA_LAU_PER = ISNULL(#T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.NO_SEQ_AVA_LAU_PER, 0) --NO_SEQ_AVA_LAU_PER, para filtro por avaliação
                                                                                    )                                       
                                            left outer join T_CMO_ENDERECO AS CIDADE_UNIDADE
                                                ON  CIDADE_UNIDADE.id_emp = @ID_EMP 
                                                and CIDADE_UNIDADE.id_uni_emp = @ID_UNI_EMP
                                                and CIDADE_UNIDADE.IR_TIP_END = 'U'

                                     WHERE  #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_EMP = @ID_EMP
                                        AND #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_UNI_EMP = @ID_UNI_EMP
                                        AND #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC in(SELECT ID_XFC FROM #FUNCIONARIOS_INATIVOS)

                                        --AND YEAR(EXAME.DT_EXM_REA) BETWEEN @DT_DE_LAUDO AND @DT_ATE_LAUDO

                                        ORDER BY #T_SP_CMO_SEL_PORTARIA_FUNCIONARIO.ID_XFC,
                                                 #T_SP_CMO_SEL_REL_FICHA_ADMISSAO.DT_ADM_PER_CPC_XFC,
                                                 #T_SP_CMO_SEL_REL_FICHA_FUNCAO.DT_INI_PER_FUN_XFC

                                END
                            ELSE 
                                BEGIN
                                set @Contador = 9

In catch I did this:

BEGIN CATCH

                                DECLARE @_ERROR_PROCEDURE VARCHAR(MAX)
                                SET @_ERROR_PROCEDURE = 'Err Nº: ' + CAST(ERROR_NUMBER() AS VARCHAR(10)) +
                                     ' | Severidade: '+ CAST(ERROR_SEVERITY() AS VARCHAR(10)) +
                                     ' | Estado: ' + CAST(ERROR_STATE() AS VARCHAR(10)) +
                                     ' | Procedure: '+ ISNULL(ERROR_PROCEDURE(),'') +
                                     ' | Linha: '+ CAST(ERROR_LINE() AS VARCHAR(10)) +
                                     ' | Erro: '+ ERROR_MESSAGE() +
                                     ' | Contador: ' + CAST(@Contador AS VARCHAR(10))

                                RAISERROR(@_ERROR_PROCEDURE,1,16)

                            END CATCH

The value printed for Counter was 8, so I think the problem is in the select below it.

    
asked by anonymous 26.04.2017 / 16:12

1 answer

2

One way to accomplish the debug that I usually use in my Store Procedures is with TRY / CATCH . Here's an example:

Notice that SQL starts counting according to query that you created. It will always include all the blank lines from the beginning or after GO .

DROP PROCEDURE TESTE_PRO   --outra query
GO                         --separador  
                           --LINHA 1 -> mesmo em branco já faz parte da procedure 
                           --LINHA 2
CREATE PROCEDURE TESTE_PRO --LINHA 3
AS
BEGIN TRY
                           --LINHA 6
                           --LINHA 7
    DECLARE @TE1 INT;
    DECLARE @TE2 INT;

    SET @TE1 = 0

    SET @TE2 = 1/0;        --LINHA 13
END TRY

BEGIN CATCH
    DECLARE @_ERROR_PROCEDURE VARCHAR(MAX)
    SET @_ERROR_PROCEDURE = 'Err Nº: ' + CAST(ERROR_NUMBER() AS VARCHAR(10)) +
                            ' | Severidade: '+ CAST(ERROR_SEVERITY() AS VARCHAR(10)) +
                            ' | Estado: ' + CAST(ERROR_STATE() AS VARCHAR(10)) +
                            ' | Procedure: '+ ISNULL(ERROR_PROCEDURE(),'') +
                            ' | Linha: '+ CAST(ERROR_LINE() AS VARCHAR(10)) +
                            ' | Erro: '+ ERROR_MESSAGE()

    RAISERROR(@_ERROR_PROCEDURE,1,16)
END CATCH

GO
EXEC TESTE_PRO

RAISERROR will return the data I chose , including the line number that the exception did by the command ERROR_LINE() .

  

Err No .: 8134 | Severity: 16 | Condition: 1 | Procedure: TESTE_PRO | Line: 13 | Error: Division error by zero.   Msg 50000, Level 1, State 16

Note: I put all this data in the catch because then I save it in a log.

Response update

Execute a sp_helptext teste_pro and see exactly how SQL will enumerate the lines.

    
26.04.2017 / 17:17