Динамический запрос с предложением Order By возникает ошибка в SQL Server 2008 - PullRequest
1 голос
/ 01 ноября 2011

У меня динамический запрос для выполнения. На этот запрос я получаю некоторые параметры от пользователя (например, параметры для подкачки). Поэтому я использую sp_executesql для выполнения запроса. Когда я указываю order by внутри запроса, я получаю сообщение об ошибке: Предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах, подзапросах и выражениях общих таблиц, если только TOP или FOR XML не являются также указано. . Как я могу решить проблему


SET @sql = 'SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY CaseID)AS RowNumber ,*<br> FROM [dbo].[CV_CaseMaster] WHERE SpaceID = @SID<br> order by @OrderBy ) AS CV_CaseMasterDetails WHERE RowNumber BETWEEN @MinRow AND @MaxRow'

`


EXEC sp_executesql @sql
                  ,N'@SID UNIQUEIDENTIFIER,@MinRow int, @MaxRow int,@OrderBy VARCHAR(50)'
                  ,@SID=@SpaceID,@MinRow = @CurrentMinRow,@MaxRow = @CurrentMaxRow, @OrderBy =  @SortBy`

OR

Можно ли указать столбец Order By с sp_executesql?

1 Ответ

2 голосов
/ 01 ноября 2011

Вы поместили заказ в неправильной позиции в запросе, и вы не можете использовать параметр для заказа по.

Я думаю, это будет работать, но оставляет вас открытым для внедрения SQL.

SET @sql = 'SELECT * 
            FROM (SELECT ROW_NUMBER() OVER(ORDER BY CaseID) AS RowNumber ,*
                  FROM [dbo].[CV_CaseMaster] 
                  WHERE SpaceID = @SID ) AS CV_CaseMasterDetails 
            WHERE RowNumber BETWEEN @MinRow AND @MaxRow 
            ORDER BY '+@SortBy
...