2012-11-10 31 views
4
exec ('select * from variable_table_name 
order by @variable') 

我正試圖把一個動態的sql語句放在一起,指定一個表名和排序列。如果我可以指定一個表名來使sql工作,那將會很好。SQL服務器按表中的第一列排序

有沒有辦法選擇表中的第一列進行排序if @variable sort by not specified?

回答

8

您可以使用:

ORDER BY 1; 

ORDER BY Clause (Transact-SQL)

order_by_expression - 指定要排序的查詢結果集列或表達式。可以將排序列指定爲名稱或列別名或表示列在選擇列表中的列的位置的非負整數。

(重點煤礦)

+0

I我想我只是找到了它,你可以爲Order By指定一個int。 – Rod

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) 
+0

在sql語句中使用+執行確實會讓上帝殺死一隻小狗:( 在你知道它有人使用該值之前: MyTbl; SELECT * FROM supersecretcreditcardtable – Robba

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'行默認設置爲第一列