2016-06-14 48 views
3

這可能是一個奇怪的問題。如何選擇*並獲得按字母順序排列的所有字段

我有一個100 +列的表。我想SELECT *所有列,並獲得與列按字母順序排列的結果查詢。

在T-SQL中可能嗎?

感謝

+2

號必須這樣做手工 –

+3

不是沒有訴諸動態SQL。 – jpw

+2

爲什麼你在乎列的排列順序?在顯示層(應用程序,報告,不管)中,_lot_更容易實現 –

回答

7

你可以建立使用在系統目錄視圖提供的信息,動態SQL語句。

下面的代碼示例演示如何:

DECLARE @sql AS NVARCHAR(MAX) 
DECLARE @cols AS NVARCHAR(MAX) 

DECLARE @tbl NVARCHAR(MAX) = N'your_table' -- this is your source table 

SELECT @cols= ISNULL(@cols + ',','') + QUOTENAME(c.name) 
FROM sys.tables t 
join sys.columns c ON c.object_id = t.object_id 
WHERE t.name = @tbl 
ORDER BY c.name 

SET @sql = N'SELECT ' + @cols + ' FROM ' + @tbl 
EXEC sp_executesql @sql 
+0

正如現在刪除的答案中指出的那樣,使用'c.object_id = OBJECT_ID('TableName')'代替與'sys.tables'視圖的連接是不必要的。 – jpw

0

DynamicSQL(SQL Server)的例子:你

declare @TABLE varchar(200) set @TABLE='persons' 
declare @SQL nvarchar(max) 
set @SQL='select ' 
select @SQL= @SQL + column_name + ',' 
from information_schema.columns where [email protected] order by column_name 
select @SQL = left(@SQL,len(@SQL)-1) + ' from ' + @TABLE -- trims the trailing comma 

--select @SQL -- If you want to see the query 

exec sp_executesql @SQL 
0
DECLARE @Table NVARCHAR(MAX)='T'--pass your table name 
DECLARE @SQL NVARCHAR(MAX)='SELECT ' 
SELECT @[email protected]+',' +NAME FROM 
(
SELECT TOP 100 QUOTENAME(NAME) AS NAME 
FROM sys.columns 
WHERE object_id = 
(
SELECT OBJECT_ID FROM sys.tables 
WHERE NAME [email protected] 
) 
ORDER BY NAME 
) AS SS 


SELECT @SQL=STUFF(@SQL,8,1,'')+' FROM '[email protected] 


EXEC sp_executesql @sql