Salut
Am urmatoarea SP
CREATE PROCEDURE [dbo].[inventar]
@comp int, @gestiune varchar(30), @data DATETIME
WITH RECOMPILE
AS
WITH Preturi (cod, pret) AS
(
SELECT cod, pret
FROM stocuri AS c1
WHERE pk_key =
(select max(pk_key) as pk_key from cont as c2
where c2.cod = c1.cod AND c2.data <= @data) AND c1.compart = @comp
)
SELECT c1.cod AS Codul,
c1.cont AS Contul, c1.um AS UM, c1.sold AS Sold,
SUBSTRING(c1.cod,3,4) AS grupa, Preturi.pret, ROUND(Preturi.pret * c1.sold, 2) AS valoare
FROM depozit c1
INNER JOIN Preturi ON c1.cod = Preturi.cod
WHERE (c1.sold <> 0) AND (c1.compart = @comp)
and (c1.gestiune = @gestiune) AND (c1.pk_key =
(SELECT MAX(pk_key) AS pk_key
FROM depozit c2
WHERE (c2.cod = c1.cod) AND c2.data <= @data AND c2.gestiune = c1.gestiune))
ORDER BY c1.cod, c1.cont
Indexes
Pe stocuri
pk_key Clustered
compart
data (incl pk_key, cod)
Pe depozit
pk_key Clustered
cod
cod,gestiune,data
depozit,cod,pk_key (incl cont, um, sold) -> recomandat de SQL Server
Pe langa acesti indecsi mai exista si altii dar nu cred ca au relevanta in acest caz (sau are!?).
Problema e ca ruleaza cam greu ptr. unele compartimente si gestiuni (cele cu foarte multe repere cam 1:30 min) si da timeout la incarcarea unui DataSet (nu as vrea sa modific Timeout la conexiune ptr ca nu rezolva problema).
Credeti ca se mai poate umbla la aceasta procedura ?
Va multumesc.
Sorin Sandu