Sql 处理动态排序的另一种方法

Sql 处理动态排序的另一种方法,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,鉴于: 您可以通过指示列的索引对结果集进行排序 SELECT * FROM CUSTOMERS ORDERY BY 1 我试图在以下上下文中使用,但是,我收到错误消息: Msg 5308,16级,状态1,第8行 窗口函数不支持整数索引作为ORDER BY子句表达式 你能想出一个解决办法吗?如果你知道列名,这应该可以: Exec (" select *, ROW_NUMBER() OVER ( ORDER BY " + columnName + " ) AS 'Seq' from dyn

鉴于:

您可以通过指示列的索引对结果集进行排序

SELECT * FROM CUSTOMERS ORDERY BY 1
我试图在以下上下文中使用,但是,我收到错误消息:

Msg 5308,16级,状态1,第8行 窗口函数不支持整数索引作为ORDER BY子句表达式


你能想出一个解决办法吗?

如果你知道列名,这应该可以:

Exec ("
select *, 
ROW_NUMBER() OVER ( ORDER BY " + columnName + " ) AS 'Seq'   
from dynamic_table");
如果列名未知:

DECLARE @table_name nvarchar(100) = 'test'
DECLARE @column_name nvarchar(100) 
SELECT 
    @column_name = columns.name
FROM sys.columns
inner join sys.tables ON tables.object_id = columns.object_id
WHERE tables.name = @table_name and column_id = 1

EXEC ('
select *, 
ROW_NUMBER() OVER ( ORDER BY ' + @column_name + ' ) AS ''Seq''   
from ' + @table_name);

我当前正在将列名作为参数传递。我想要一种方法,如果我不传递参数,它将选择传入的任何表的第一列。@Rod您想过从模式中查询名称吗?谢谢您的帮助。
DECLARE @table_name nvarchar(100) = 'test'
DECLARE @column_name nvarchar(100) 
SELECT 
    @column_name = columns.name
FROM sys.columns
inner join sys.tables ON tables.object_id = columns.object_id
WHERE tables.name = @table_name and column_id = 1

EXEC ('
select *, 
ROW_NUMBER() OVER ( ORDER BY ' + @column_name + ' ) AS ''Seq''   
from ' + @table_name);