0

与えられた:

列のインデックスを指定することで、結果セットを並べ替えることができます。

SELECT * FROM CUSTOMERS ORDERY BY 1

次のコンテキストで使用しようとしていますが、エラーメッセージが表示されます。

メッセージ5308、レベル16、状態1、行8ウィンドウ関数は、ORDERBY句の式として整数インデックスをサポートしていません。

EXEC ("
SELECT  *, 
        ROW_NUMBER() OVER ( ORDER BY 1 ) AS 'Seq'   
from dynamic_table");

回避策を考えられますか?

4

1 に答える 1

1

列名がわかっている場合、これは機能するはずです:

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);
于 2012-11-28T00:24:01.160 に答える