有什么方法可以提高这个存储过程的性能吗?

Any way to improve the performance of this store procedure?

有什么方法可以提高这个存储过程的性能吗? 例如,将两个更新子句组合在一个唯一语句 (T-SQL) 中。 BonosConvenio 和 CON_Convenio 几乎有 5K 行。

create table #resultados (
        monto_deuda      float
       ,Cuenta           float
       ,Rut              varchar(10)
       ,CodCONVENIO      varchar(4)
       ,CONVENIO         varchar(50)
       ,Bono             varchar(15)
       ,MontoBono        float
       ,ApellDeudor      varchar(100)
)
INSERT INTO #resultados(Cuenta,monto_deuda,Rut,CodCONVENIO,CONVENIO,Bono,MontoBono,ApellDeudor) 
select ATC_CTA_Correlativo, monto_deuda, RutDeudor, CodCONVENIO,'','',0,''
    from CartaCobProgramasCONVENIO
    where Nomina = @Nomina

UPDATE #resultados 
SET Bono=bc.Bono,
    MontoBono=bc.Monto
FROM BonosCONVENIO bc
WHERE bc.ATC_CTA_Correlativo=#resultados.Cuenta;

UPDATE #resultados 
SET ApellDeudor=upper(rtrim(ltrim(Paciente.PAC_PAC_Nombre)) 
FROM BD_ENTI_CORPORATIVA..ATC_Cuenta Cuenta, BD_ENTI_CORPORATIVA..PAC_Paciente Paciente
WHERE Cuenta.ATC_CTA_Correlativo=#resultados.Cuenta AND Paciente.PAC_PAC_Numero = Cuenta.PAC_PAC_Numero

UPDATE #resultados 
SET CONVENIO=c.CON_CON_Descripcio
FROM BD_ENTI_CORPORATIVA..CON_Convenio c
WHERE c.CON_CON_Codigo =#resultados.CodCONVENIO

SELECT * FROM #resultados ORDER BY Cuenta,Bono
End

试试这个:

SELECT
  ccpc.ATC_CTA_Correlativo                     Cuenta
, ccpc.monto_deuda
, ccpc.RutDeudor                               Rut
, ccpc.CodCONVENIO
, c.CON_CON_Descripcio                         CONVENIO
, bc.Bono
, bc.Monto                                     MontoBono
, UPPER(RTRIM(LTRIM(Paciente.PAC_PAC_Nombre))) ApellDeudor

FROM
  CartaCobProgramasCONVENIO ccpc
    INNER JOIN
    BonosCONVENIO bc ON
  ccpc.ATC_CTA_Correlativo = bc.ATC_CTA_Correlativo
    INNER JOIN
    BD_ENTI_CORPORATIVA..ATC_Cuenta Cuenta ON
  ccpc.ATC_CTA_Correlativo = Cuenta.ATC_CTA_Correlativo
    INNER JOIN
    BD_ENTI_CORPORATIVA..PAC_Paciente Paciente ON
  Cuenta.PAC_PAC_Numero = Paciente.PAC_PAC_Numero
    INNER JOIN
    BD_ENTI_CORPORATIVA..CON_Convenio c ON
  c.CON_CON_Codigo = ccpc.CodCONVENIO
WHERE Nomina = @Nomina;

如果由于联接而出现重复记录,那是因为表中有多个值。您的原始查询(使用更新)将覆盖并仅显示最后一行的值。要解决此问题,您可能需要 GROUP BYMINMAXSUM 或其他任何内容。