0

Это мой динамический SQL запрос:Windowed функции не поддерживают константы в качестве предложения ORDER BY выражений в SQL Server TempTable

SET @SQL = 'SELECT * FROM 
       (SELECT *, ROW_NUMBER() OVER(ORDER BY '+ @sortBy +') AS rowNumber FROM #temp) A 
      WHERE A.rowNumber BETWEEN ' + CONVERT(varchar(9), 
(@startIndex -1) * @PageSize + 1) + ' AND ' + CONVERT(varchar(9), 
(((@startIndex -1) * @PageSize + 1) + @PageSize) - 1)+'' 

print(@SQL) 
exec(@SQL) 

И это вывод команды PRINT:

SELECT * 
FROM 
    (SELECT *, ROW_NUMBER() OVER(ORDER BY Typename) AS rowNumber  
    FROM #temp) A 
WHERE A.rowNumber BETWEEN 1 AND 5 

где Typename - значение параметра @sortBy.

Но я получаю эту ошибку:

Windowed functions do not support constants as ORDER BY clause expressions.

+0

есть [Имя_пользователя] столбец в таблице темпа в это время? –

+0

@Used_By_Already: yes – Athul

+0

Можете ли вы опубликовать структуру '# temp' – ughai

ответ

1

Предложите использовать QUOTENAME (@sortBy) в конкатенации строк, это обеспечит сохранение содержимого локальной переменной как имени столбца.

+0

Как передать имя столбца + asc/desc в этом контексте? – Athul

+1

может использовать дополнительную локальную переменную? как это ** ... VER (ORDER BY '+ QUOTENAME (@sortBy) +' '+ @sort_direction +') AS ... ** –

0

Это не может раствора, но если это помогает ..

Windowed functions do not support constants as ORDER BY clause expressions.

Эта ошибка обычно наблюдается при попытке иметь constant value в ORDER BY clause of a windowed function

например ROW_NUMBER() OVER(ORDER BY 'const_val')