0

Un moyen d'améliorer les performances de cette procédure de magasin? Par exemple, combiner les deux clauses mises à jour dans une instruction unique (T-SQL). BonosConvenio et CON_Convenio sont presque 5K lignes.Un moyen d'améliorer les performances de cette procédure de magasin?

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 
+0

Oui, effectuez des jointures et effectuez une seule instruction de sélection - pas besoin de la table temporaire et des mises à jour. – SQLMason

Répondre

0

Essayez ceci:

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; 

Si vous avez des enregistrements en double à cause de la joint, il est parce qu'il ya plusieurs valeurs dans les tableaux. Votre requête d'origine (à l'aide d'une mise à jour) remplacerait et afficherait uniquement la valeur de la dernière ligne. Pour contourner cela, vous voudrez probablement avoir un GROUP BY et MIN, MAX, SUM ou autre.