2011-11-01 65 views
1

我有一個要執行的動態查詢。對於這個查詢,我從用戶接收一些參數(例如用於分頁的參數)。所以我使用sp_executesql來執行查詢。當我在查詢中指定order by時,出現錯誤消息除非還指定了TOP或FOR XML,否則ORDER BY子句在視圖,內聯函數,派生表,子查詢和公用表表達式中無效。。我怎麼能到這兒來的問題帶有Order By子句的動態查詢在SQL Server 2008中出現錯誤


SET @sql = 'SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY CaseID)AS RowNumber ,*
FROM [dbo].[CV_CaseMaster] WHERE SpaceID = @SID
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)' 
        ,@[email protected],@MinRow = @CurrentMinRow,@MaxRow = @CurrentMaxRow, @OrderBy = @SortBy` 

OR

我可以指定一個Order Bysp_executesql

回答

2

您已將訂單放在查詢中的錯誤位置,並且您無法使用參數進行訂購。

我想這會工作,但它讓你打開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 '[email protected] 
+0

Mikael Eriksson這也行不通 – Rauf

+1

這應該工作。你現在得到什麼錯誤。你需要在查詢之上聲明AND設置SortBy,並從executableql命令中刪除OrderBy – Kamal

+0

@Rauf - 你得到了什麼錯誤? '@ SortBy'有什麼價值? –