2016-06-14 72 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