Debug Proc in sql server 2014 database

Asked

Viewed 236 times

2

I use Sql Server 2014. I am having problems with Stored Procedure, because when running with certain filters, it triggers this error:

Message 512, Level 16, Status 1, Procedure SP_CMO_SEL_PORTARIA_INATIVOS, Line 485 Subquery returned more than 1 value. This is not permitted when the subquery Follows =, != , <, <= ,> , >= or when the subquery is used as an Expression.

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

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

I did as the colleague Ismael directed and returned me this:

Err Nº: 512 | Severity: 16 | Status: 1 | Procedure: SP_CMO_SEL_PORTARIA_INATIVOS | Line 389 | Error: Subquery returned more than 1 value. This is not permitted when the subquery Follows =, != , <, <= , >, >= or when the subquery is used as an Expression. Message 50000, Level 1, State 16

Only the line 389 has nothing on it, it’s blank and it’s on top of the BEGIN TRY.

My Proc code pad is 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 set a type variable int thus:

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

No catch I did that:

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 printed value for Counter was 8, so I think the problem is in select below it.

1 answer

2


A way to realize the debug that I normally use in my Store Procedures is with the use of TRY / CATCH. Take an example:

Note that SQL starts counting according to query that you created.
Always include all blank lines from the start or after the 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

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

Err Nº: 8134 | Severity: 16 | Status: 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 saved it in a log.

Response update

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

  • Can you place part of your proc? Recreate the Procedure in a new query. Only the Procedure, so that the first line in the IDE is the create proc.

  • I put the code for Proc’s return in the post.

  • You have to post the code from the beginning, because from there we will count the lines.

  • I’ve been debugging javascript with Alert(). I created a variable of type int and set the variable in each block. The last impression I caught on the catch, was 8, that means that the error happened soon after, otherwise it would have printed 9 and not 8.

  • @pnet I updated the response with a command that will help you.

  • @pnet All the subselects which are used as a column or in where where the syntax is field = subconsultation (provided that it does not use any aggregation function like sum, max etc) could be secured with a TOP 1.

  • I get it. The Indsert I gave in the bank, is that it broke everything, but I will consider, only that I can not change much this proc. I’m not who I made it and I can understand the business here.

Show 2 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.