合并所有表的数据到一个表中

现在数据库里有很多表,表的字段(列明)名称一样,但是表的字段数目不一样,有的表数据详细,有的表只有主要的几列数据,
现在要将数据库(照明工业)里的这些表合并到一个表(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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值