Torna al Thread

USE tempdb; GO CREATE TABLE #Originale ( [IdOrig] [int] NOT NULL, [Periodicita] [nvarchar](3) NULL, [Desc1] [nvarchar](250) NULL ); CREATE TABLE #Replicata ( [OrigRef] [int] NULL, [Data] date NULL, [Desc2] [nvarchar](250) NULL, [IdReplic] [int] IDENTITY(1,1) NOT NULL ); INSERT #Originale ([IdOrig], [Periodicita], [Desc1]) VALUES (101, N'Set', N'scale'), (102, N'Set', N'temperature'), (103, N'Set', N'addolcitore'), (104, N'Men', N'giardini'), (105, N'Set', N'spese varie'); INSERT #Replicata ([OrigRef], [Data], [Desc2]) VALUES (101, '20150331', N'scale'), (101, '20150407', N'scale'), (102, '20150406', N'temperature'), (102, '20150413', N'temperature'), (103, '20150425', N'addolcitore'), (104, '20150310', N'giardini'), (104, '20150410', N'giardini'); SELECT 'Prima', * FROM #Replicata R ORDER BY R.OrigRef, R.Data -- data di FINE La Data a cui voglio aggiornare la replicata DECLARE @EndDate AS date = '20150531'; -- questo diventera GETDATE() DECLARE @IdOrig AS int -- Il campo IdOrig di #Originale DECLARE @Periodicita AS nvarchar(3) -- Il campo Periodicita di #Originale DECLARE @Desc1 AS nvarchar(250) -- Il campo Desc1 di #Originale DECLARE @MaxData AS datetime -- Il Max(Data) di #Replicata DECLARE Curs1 CURSOR FOR SELECT IdOrig, Periodicita, Desc1 FROM #Originale OPEN Curs1 FETCH NEXT FROM Curs1 INTO @IdOrig, @Periodicita, @Desc1 WHILE @@FETCH_STATUS = 0 BEGIN -- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -- Originale(IdOrig, Periodicita, Desc1) Replicata(OrigRef, Data, Desc2, IdReplic) @EndDate Ciclo: SET @MaxData = (SELECT Max(Data) FROM #Replicata WHERE OrigRef=@IdOrig) IF @MaxData IS NULL -- Recupero i record che NON sono ancora presenti nella tabella #Replicata INSERT INTO #Replicata (OrigRef, Data, Desc2) VALUES (@IdOrig, @EndDate, @Desc1 + ' <---Nuova') IF @MaxData <= @EndDate BEGIN IF @Periodicita = 'Set' INSERT INTO #Replicata (OrigRef, Data, Desc2) VALUES (@IdOrig, DATEADD(DAY, 7, @MaxData), @Desc1 + ' <---Settimanale') IF @Periodicita = 'Men' INSERT INTO #Replicata (OrigRef, Data, Desc2) VALUES (@IdOrig, DATEADD(MONTH, 1, @MaxData), @Desc1 + ' <---Mensile') GOTO Ciclo END -- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx FETCH NEXT FROM Curs1 INTO @IdOrig, @Periodicita, @Desc1 END CLOSE Curs1 DEALLOCATE Curs1 SELECT 'Dopo', * FROM #Replicata R ORDER BY R.OrigRef, R.Data DROP TABLE #Originale; GO DROP TABLE #Replicata; GO -- Finito
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5