无论两个连接表中的列顺序如何,都执行 UNION ALL

Ann*_*son 6 sql-server union

SELECT * INTO TABLE1 
FROM Table2
UNION ALL 
SELECT * FROM Table3;
GO
Run Code Online (Sandbox Code Playgroud)

我正在使用此查询将两个表堆叠到一个表中。这些表的列顺序应该完全相同,这样查询才能成功执行。

我想知道是否有一个技巧我们可以做到,无论列顺序如何,它都可以工作。有没有办法指示 SQL Server 按名称自动排列两个表中的列并执行UNION

例如,在 SAS 中,诀窍是编写一个OUTER UNION CORR查询。

Mik*_*son 4

我认为你有两个选择。要么键入查询中的列,要么使用动态 SQL 执行某些操作。

declare @sql nvarchar(max)
declare @col nvarchar(max)

select @col = stuff((select ','+quotename(C.COLUMN_NAME)
                     from INFORMATION_SCHEMA.COLUMNS as C
                     where C.TABLE_NAME = 'Table2'
                     order by C.ORDINAL_POSITION
                     for xml path(''), type).value('.',  'nvarchar(max)'), 1, 1, '')

set @sql = 'select '+@col+' into Table1 from Table2 union all '+
           'select '+@col+' from Table3'

exec (@sql)
Run Code Online (Sandbox Code Playgroud)