如何合并许多类似的表格?

时间:2015-07-11 03:32:08

标签: sql-server ssms-2012

我有很多表都具有相同的结构和相似的表名,我正在寻找一种方法将它们中的几列合并到一个带有两个附加列的新表中:一个自动生成的整数PK,以及源表。例如,

UniqueID SourceID,Xcoord,Ycoord,Zcoord,SourceTable

我设法创建了一个包含我想要使用的所有表的列表的表,但不知道下一步该做什么。

SELECT [name]
INTO PointTables
FROM [Surveys].[sys].[tables]
where [name] like '%CoordDB'

2 个答案:

答案 0 :(得分:0)

这个问题不太清楚。 这些表的列名是否相同? 您想插入PointTables吗?

您可以创建表格:

create table PointTables(
UniqueID    int identity
, Xcoord    int
, Ycoord    int
, Zcoord    int
, SourceTable   varchar(50)

之后,您可以在sp_executesql命令和连接的帮助下插入表

declare @command nvarchar(max) 
select @command = 'insert into PointTables(Xcoord,YCoord,ZCoord,SourceTable)
select [Xcoord],[YCoord],[Zcoord],'''+name+''' from '+name from sys.tables where name like '%CoordDB%'
execute sp_executesql @command

答案 1 :(得分:0)

Charlie Lukman的回答是一个良好的开端,但出于某种原因只在第一桌上工作。我查看了其他几篇文章并发现了游标,它们允许您使用WHILE循环一次处理一行,以构建/连接多个INSERT INTO命令。虽然这可以在我对5个表格的测试中起作用,但是当我到达100或者1000个表格时,我会担心表现。

declare @command nvarchar(max) 
declare @tblname varchar(50)
declare TableCursor Cursor
    FOR SELECT name FROM sys.tables where name like '%%DB_COORD'
SET @command = ''
OPEN TableCursor
    FETCH NEXT FROM TableCursor INTO @tblname

    WHILE @@FETCH_STATUS <> -1
    BEGIN
        select @command =  @command + 'INSERT into MasterPoints(SourceID, Xcoord, Ycoord, Zcoord, PtCode, SourceTable)  SELECT UPTNUM, EAST, NORTH, ELEVATION, CODE,''' + @tblname + '''from "' + @tblname + '" '
        FETCH NEXT FROM TableCursor INTO @tblname
    END
CLOSE TableCursor
DEALLOCATE TableCursor

execute sp_executesql @command

SELECT distinct [SourceTable]   来自[Manifold]。[dbo]。[MasterPoints]