现在数据库里有很多表,表的字段(列明)名称一样,但是表的字段数目不一样,有的表数据详细,有的表只有主要的几列数据,
现在要将数据库(照明工业)里的这些表合并到一个表(tb_huangye)中
--将所有表的名称存储在tb_allname中
select name into tb_allname from 照明工业.dbo.sysobjects where type='u'
--为tb_allname增加一个id标识列
alter table tb_allname add id int identity(1,1)
--用一个循环执行tb_allname表里所有的表明
declare @i int
set @i=1
declare @tab_name varchar(100)
declare @text varchar(500)
declare @sql varchar(5000)
declare @dield varchar(500)
set @i=1
while @i<=156
begin
set @dield=''
set @tab_name=(select [name] from tb_allname where id=@i)
--从系统表中查出该表的字段,messageid是自动标识列除外
set @text = 'select a.name from 照明工业.dbo.syscolumns a ,照明工业.dbo.sysobjects b
where a.id=b.id and b.type=''U'' and b.name='''+ @tab_name +''' and a.name <> ''messageid'''
--将该表的字段合并成一列,用逗号隔开
--select @text
create table #T(field varchar(500))
insert into #T exec(@text)
select @dield=@dield+field+', ' from #T
drop table #T
--去掉最后的一个逗号
set @dield=left(@dield,len(@dield)-1)
--select @dield
--拼接字符串
set @sql='insert into tb_huangye('+ @dield +')'+' select '+ @dield +' from 照明工业.dbo.'+@tab_name
--执行@sql
exec (@sql)
--如果出错,记录循环到该地方的@i
if @@error <>0
begin
--select @text
--select @dield
--select * from #T
select @i
return
end
set @i=@i+1
end
现在要将数据库(照明工业)里的这些表合并到一个表(tb_huangye)中
--将所有表的名称存储在tb_allname中
select name into tb_allname from 照明工业.dbo.sysobjects where type='u'
--为tb_allname增加一个id标识列
alter table tb_allname add id int identity(1,1)
--用一个循环执行tb_allname表里所有的表明
declare @i int
set @i=1
declare @tab_name varchar(100)
declare @text varchar(500)
declare @sql varchar(5000)
declare @dield varchar(500)
set @i=1
while @i<=156
begin
set @dield=''
set @tab_name=(select [name] from tb_allname where id=@i)
--从系统表中查出该表的字段,messageid是自动标识列除外
set @text = 'select a.name from 照明工业.dbo.syscolumns a ,照明工业.dbo.sysobjects b
where a.id=b.id and b.type=''U'' and b.name='''+ @tab_name +''' and a.name <> ''messageid'''
--将该表的字段合并成一列,用逗号隔开
--select @text
create table #T(field varchar(500))
insert into #T exec(@text)
select @dield=@dield+field+', ' from #T
drop table #T
--去掉最后的一个逗号
set @dield=left(@dield,len(@dield)-1)
--select @dield
--拼接字符串
set @sql='insert into tb_huangye('+ @dield +')'+' select '+ @dield +' from 照明工业.dbo.'+@tab_name
--执行@sql
exec (@sql)
--如果出错,记录循环到该地方的@i
if @@error <>0
begin
--select @text
--select @dield
--select * from #T
select @i
return
end
set @i=@i+1
end