按列名排序2个表

时间:2013-09-24 21:08:30

标签: sql sql-server-2005

我有两个SQL Server表,它们都有数百列。

表1的样本是:

ID    ColA   ColC   ColD  ColF ...

表2的样本是:

ID    ColB   ColE ...   

我需要加入列ID,然后按字母顺序打印列。现在我需要按字母顺序排列列的名称。我还不关心每一栏中的数据。

所以它应该是:

ID  ColA  ColB  ColC  ColD  ColE  ColF ...

1 个答案:

答案 0 :(得分:1)

您可以使用它来帮助构建查询:

SELECT ',' + name 
FROM sys.columns
WHERE object_id IN (OBJECT_ID('Table1'),OBJECT_ID('Table2'))
ORDER BY name

更新:动态SQL版本(仍需手动填写表名称):

DECLARE @sql VARCHAR(MAX)
       ,@cols VARCHAR(MAX)
SET @cols = (SELECT STUFF((SELECT ',' + Name
                           FROM (SELECT DISTINCT Name
                                  FROM sys.columns
                                  WHERE object_id IN (OBJECT_ID('Table1'),OBJECT_ID('Table2'))
                                     AND Name <> 'ID'
                                  )sub
                            ORDER BY name
                            FOR XML PATH('')        
                            ), 1, 1, '' ))
SET @sql = 'SELECT ' +@cols+'
            FROM Table1 a
            JOIN Table2 b
              ON a.ID = b.ID
           '
EXEC (@sql)