Changer le slider en CTE

Est-il possible d'écrire le slider suivant sur CTE? Il faut beaucoup de time pour fonctionner actuellement.

Voici mon code:

if @ReportSource = 'TAB' BEGIN DECLARE yr_cursor CURSOR FOR SELECT YEAR, RouteNum, RampInfo, BeginMeasure, EndMeasure, OriginalRoute, Description, CountyDesc, Incidents from #RptParms OPEN yr_cursor; FETCH NEXT FROM yr_cursor INTO @Year, @RouteNum, @RampInfo, @BeginMeasure, @EndMeasure, @OriginalRoute, @Description, @CountyDesc, @Incidents; WHILE (@@FETCH_STATUS = 0) BEGIN SELECT @sql_str_fred = N'SELECT route_number, beg_measure AS MILELOG, AADT_TOTAL AS VMT, end_measure, RCLINK,YEAR FROM VW_FRED_AADT_HIST WHERE route_number = '''+ @RouteNum + ''' and YEAR = '''+ @Year + ''' and FIPS_AND_COUNTY Like ' + '''%' + @CountyDesc + ''' and beg_measure BETWEEN '+ cast(@BeginMeasure as varchar(8)) + ' and ' + cast(@EndMeasure as varchar(8)) + '' SELECT @sql_str_fred = N' SELECT * from OPENQUERY(EDWGEARS, ''' + REPLACE(@sql_str_fred, '''', '''''') + ''')' INSERT #freddata (ROUTE_NBR , MILELOG , VMT , END_MEASURE , RCLINK , YEAR ) EXEC sp_ExecuteSQL @sql_str_fred FETCH NEXT FROM yr_cursor INTO @Year, @RouteNum, @RampInfo, @BeginMeasure, @EndMeasure, @OriginalRoute, @Description, @CountyDesc, @Incidents; END CLOSE yr_cursor DEALLOCATE yr_cursor END; 

Supposons #RptParms – est une table avec des valeurs de pameter et n'est pas énorme … Alors tous les parameters peuvent être combinés avec une requête comme ceci:

 -- The maximum length of the query ssortingng in OPENQUERY is 8 KB !!! declare @sql varchar(max) = ' ;WITH lst AS ( SELECT * FROM (VALUES --- values --- ) aa(rn,yr,dsc,m1,m2) ) SELECT route_number, beg_measure AS MILELOG, AADT_TOTAL AS VMT, end_measure, RCLINK,YEAR FROM VW_FRED_AADT_HIST lst WHERE route_number = lst.rn and YEAR = lst.yr and FIPS_AND_COUNTY Like lst.dsc and beg_measure BETWEEN lst.m1 and lst.m2 ' select @sql = REPLACE(@sql, '--- values ---', '--- values ---, (' + ISNULL('''' + RouteNum + '''', 'NULL') -- rn: 1234 --> '1234' or --> NULL + ',' + ISNULL('''' + YEAR + '''', 'NULL') -- yn: 1234 --> '1234' + ',' + ISNULL('''%' + replace(replace(replace(replace(Description , '[', '[[]') , '%', '[%]') , '_', '[_]') , '''', '''''') + '''', 'NULL') -- dsc: a_b[c]%d'e --> '%a[_]b[[]c][%]d''e' + ',' + ISNULL('''' + cast(BeginMeasure as varchar(8)) + '''', 'NULL') -- m1: 1234 --> '1234' + ',' + ISNULL('''' + cast(EndMeasure as varchar(8)) + '''', 'NULL') -- m2: 1234 --> '1234' + ')') from #RptParms -- print @sql /* ;WITH lst AS ( SELECT * FROM (VALUES --- values ---, ('1234','1234','%a[_]b[[]c][%]d''e','1234','1234'), ('222',NULL,'%abcde','1234','1234'), (NULL,'1234','%a[_]b[[]c][%]d''e','1234','1234') ) aa(rn,yr,dsc,m1,m2) ) SELECT route_number, beg_measure AS MILELOG, AADT_TOTAL AS VMT, end_measure, RCLINK,YEAR FROM VW_FRED_AADT_HIST, lst WHERE route_number = lst.rn and YEAR = lst.yr and FIPS_AND_COUNTY Like lst.dsc and beg_measure BETWEEN lst.m1 and lst.m2 */ INSERT #freddata (ROUTE_NBR, MILELOG, VMT, END_MEASURE, RCLINK, YEAR) SELECT * from OPENQUERY(EDWGEARS, @sql) 

Encore une fois: La longueur maximale de la string de requête dans OPENQUERY est de 8 Ko !!!