Utiliser un slider avec un CTE

J'ai besoin d'un slider pour la requête ci-dessous afin que je puisse passer en boucle pour récupérer / mettre à jour / insert d'autres données. Quelqu'un peut-il m'aider avec ça?

DECLARE @FROMDATE DATETIME DECLARE @TODATE DATETIME SELECT @FROMDATE = Getdate() SELECT @TODATE = Getdate() + 7 ;WITH DATEINFO(DATES) AS (SELECT @FROMDATE UNION ALL SELECT DATES + 1 FROM DATEINFO WHERE DATES < @TODATE) SELECT * FROM DATEINFO OPTION (MAXRECURSION 0) 

J'ai essayé tant de façons, mais je n'en ai trouvé aucune qui marchait.

J'utilise

 declare @adate datetime DECLARE @FROMDATE DATETIME DECLARE @TODATE DATETIME select @FROMDATE=getdate() select @TODATE =getdate()+7 declare @weekdates cursor for WITH DATEINFO(DATES) AS (SELECT @FROMDATE UNION ALL SELECT DATES + 1 FROM DATEINFO WHERE DATES < @TODATE) SELECT * FROM DATEINFO OPTION (MAXRECURSION 0) open @weekdates fetch next from @weekdates into @adate while @@fetch_status=0 begin print 'success' fetch next from @weekdates into @adate end close @weekdates deallocate @weekdates 

Pourtant, je reçois des erreurs

Il suffit de le mettre avant l'expression de la table commune:

 DECLARE @FROMDATE DATETIME DECLARE @TODATE DATETIME select @FROMDATE=getdate() select @TODATE =getdate()+7 declare boris cursor for WITH DATEINFO(DATES) AS (SELECT @FROMDATE UNION ALL SELECT DATES + 1 FROM DATEINFO WHERE DATES < @TODATE) SELECT * FROM DATEINFO OPTION (MAXRECURSION 0) 

(Cependant, insérez les mises en garde habituelles sur les sliders étant presque toujours le mauvais outil pour le travail.) Si vous pouvez find une façon de faire l'set de l'opération de manière fixe, c'est généralement préférable et plus performant (ou au less se prêtant à l'optimization des performances))

Il est bon d'utiliser @ dans un nom de slider mais la syntaxe que vous utilisez est incorrecte.

 DECLARE @adate DATETIME DECLARE @FROMDATE DATETIME DECLARE @TODATE DATETIME SELECT @FROMDATE = getdate() SELECT @TODATE = getdate() + 7 DECLARE @weekdates CURSOR; SET @weekdates = CURSOR FOR WITH DATEINFO(DATES) AS (SELECT @FROMDATE UNION ALL SELECT DATES + 1 FROM DATEINFO WHERE DATES < @TODATE) SELECT * FROM DATEINFO OPTION (MAXRECURSION 0) OPEN @weekdates FETCH next FROM @weekdates INTO @adate WHILE @@fetch_status = 0 BEGIN PRINT 'success' FETCH next FROM @weekdates INTO @adate END 

Lorsqu'il est déclaré en tant que variable locale @ , le slider est automatiquement fermé et libéré lorsque la variable sort de la scope.