我有很多表都具有相同的结构和相似的表名,我正在寻找一种方法将它们中的几列合并到一个带有两个附加列的新表中:一个自动生成的整数PK,以及源表。例如,
UniqueID SourceID,Xcoord,Ycoord,Zcoord,SourceTable
我设法创建了一个包含我想要使用的所有表的列表的表,但不知道下一步该做什么。
SELECT [name]
INTO PointTables
FROM [Surveys].[sys].[tables]
where [name] like '%CoordDB'
答案 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]