4
exec ('select * from variable_table_name
order by @variable')

我正在尝试将一个动态 sql 语句放在一起,您可以在其中指定一个表名和排序列。如果我可以指定一个表名来使 sql 工作,那就太好了。

如果未指定@variable sort by,有没有办法选择表的第一列进行排序?

4

3 回答 3

14

您可以使用:

ORDER BY 1;

ORDER BY 子句(Transact-SQL)

order_by_expression - 指定对查询结果集进行排序的列或表达式。排序列可以指定为名称或列别名,或表示列在选择列表中的位置的非负整数

(强调我的)

于 2012-11-10T20:09:13.357 回答
1

这个脚本应该可以完成这项工作

DECLARE @tbl NVARCHAR(128)
DECLARE @col NVARCHAR(128)
DECLARE @sql NVARCHAR(MAX)

SET @tbl = 'MyTbl'
SET @col = '' --enter column name when required

IF @col = ''
BEGIN
    SET @sql = 'SELECT * FROM ' + @tbl + ' ORDER BY 1'
END
ELSE
    SET @sql = 'SELECT * FROM ' + @tbl + ' ORDER BY ' + @col

EXEC(@sql)
于 2012-11-10T20:19:42.210 回答
0

像这样的东西(我以 Adventureworks 为例):-

DECLARE @SORTCOLUMN varchar(50);

SET @SORTCOLUMN = 'OrganizationLevel';

IF @SORTCOLUMN IS NULL
    EXEC('SELECT * FROM HumanResources.Employee ORDER BY 1')
ELSE
    EXEC('SELECT * FROM HumanResources.Employee ORDER BY ' + @SORTCOLUMN)

省略“SET @SORTCOLUMN”行以默认为第一列

于 2012-11-10T20:21:52.743 回答