Torna al Thread
SET NOCOUNT ON;
GO
DECLARE @idTestata int;
DECLARE @counter int = 0;
DECLARE @valore decimal(10, 4);
DECLARE @DataDa datetime;
DECLARE @DataA datetime;
SELECT @DataDa = GETDATE();
SELECT @DataDa;
PRINT 'creo il cursore...'
DECLARE CUR CURSOR FOR
SELECT
idTestata
FROM
dbo.Testata
WHERE
idTestata <= 100;
PRINT 'inizio ciclo...'
OPEN CUR;
FETCH NEXT FROM CUR INTO @IdTestata;
WHILE @@FETCH_STATUS = 0
BEGIN
-- calcolo il valore dalla dettagli per la testata
SELECT
@valore = MAX(CASE
WHEN (DATEPART(minute, dataDettaglio) % 2) <> 0
THEN valoreInt / valoreDec
ELSE 999
END)
FROM
dbo.Dettagli
WHERE
idTestata = @idTestata;
-- inserisco il risultato
INSERT INTO dbo.Risultati (idTestata, valore)
VALUES (@idTestata, @valore);
SET @counter = @counter + @@ROWCOUNT;
FETCH NEXT FROM CUR INTO @idTestata;
END;
SELECT @DataA = GETDATE();
SELECT @DataA;
IF @counter > 0
BEGIN
PRINT 'cicli totali: ' + CAST(@counter AS varchar(20));
PRINT 'durata totale: ' + CAST(DATEDIFF(second, @DataDa, @DataA) AS varchar(20)) + ' sec.';
PRINT 'durata al ciclo: ' + CAST(CAST((DATEDIFF(second, @DataDa, @DataA) * 1.0 / @counter) AS decimal(10,3)) AS varchar(20)) + 'sec.';
END;
CLOSE CUR;
DEALLOCATE CUR;
DELETE FROM dbo.Risultati;
/*
-----------------------
2013-10-03 18:41:18.013
creo il cursore...
inizio ciclo...
-----------------------
2013-10-03 18:41:20.537
cicli totali: 100
durata totale: 2 sec.
durata al ciclo: 0.020sec.
*/