Ciao a tutti
sto per mettere mano ad una stored procedure lunga ben 1500 righe per cercare di migliorare i tempi di calcolo; ho visto che ci sono un sacco di cursori, anche innestati, e pensavo di sostituirli perchè ho letto da qualche parte che questi oggetti possono usare molte risorse, anche se alla fine ciascun di questi ha come record una o due righe come risultato della select.
In alcuni casi quindi posso sostituire il cursore con una semplice query del tipo
SELECT TOP 1 @colona = colonnaT FROM Tabella Where ... order by id desc
ma in alcuni casi ho bisogno di gestire un record alla volta di una tabella, esempio:
DECLARE cmpCur CURSOR FOR
SELECT VL.IDNumber, VL.LaidType AS DispType, MT.Manufacturer, MT.WallThickness,
MR.HeatNumber, MR.Length
,VL.WeldID,VL.Component, VL.Extension, VL.Remarks, VL.Remarks2,VL.NDTExtension
FROM dbo.V_LAY_List VL
LEFT JOIN (dbo.MainRegistry MR INNER JOIN dbo.MaterialTypes MT ON MR.Component = MT.Component AND MR.MaterialType = MT.MaterialType)
ON VL.Component = MR.Component AND VL.IDNumber = MR.IDNumber AND VL.Extension = MR.Extension
WHERE VL.Location = @Location AND VL.DocNumber = @DocNumber
ORDER BY VL.LineItem ASC;
e cosi via ...
qui
http://blog.sqlauthority.com/2010/02/16/sql-server-stored-procedure-optimization-tips-best-practices/
si consiglia di usare un ciclo while ma mi sembra abbastanza complicato, che ne dite se usassi una tabella temporanea?? è meglio o peggio? o è meglio una tabella del DB creata al volo e poi rimossa?
ciao e grazie