4

我正在使用 SQL Server 2008。我的程序是

SELECT ContractorID ,
       Name,
       ROW_NUMBER() OVER (ORDER BY ContractorID) as RowNumber
FROM dbo.Contractor 

这是可行的,但现在我想将参数传递给OVER函数。

我努力了 :

DECLARE @OrderBy VARCHAR(MAX)
SET @OrderBy = 'ORDER BY ContractorID'

SELECT ContractorID ,
       Name,
       ROW_NUMBER() OVER (@OrderBy) as RowNumber
FROM dbo.Contractor 

这会给出错误“@OrderBy 附近的语法不正确”?我怎样才能做到这一点?谢谢。

4

3 回答 3

4

你可能有一个动态 SQL 然后执行它

DECLARE @OrderBy VARCHAR(MAX)
SET @OrderBy = 'ORDER BY ContractorID'
DECLARE @SQL VARCHAR(MAX)
SET @SQL = 
'SELECT ContractorID ,
       Name,
       ROW_NUMBER() OVER (' + @OrderBy + ') as RowNumber
FROM dbo.Contractor '

EXEC (@SQL)
于 2013-08-02T06:50:44.523 回答
4

试试这个——

DECLARE @OrderBy VARCHAR(MAX)
SET @OrderBy = 'ORDER BY ContractorID'

DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = 'SELECT ContractorID ,
       Name,
       ROW_NUMBER() OVER (' + @OrderBy + ') as RowNumber
FROM dbo.Contractor'

PRINT @SQL
EXEC sys.sp_executesql @SQL
于 2013-08-02T06:51:09.167 回答
-1

为什么不试试这个..

DECLARE @OrderBy VARCHAR(MAX)
SET @OrderBy = 'ContractorID'

SELECT ContractorID ,
       Name,
       ROW_NUMBER() OVER (order by @OrderBy) as RowNumber
FROM dbo.Contractor 

希望这可以帮助..

于 2013-08-02T06:52:28.517 回答