2011-11-01 63 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'有什么价值? –