多分库多分表(结构相同)脚本创建联合视图

--今天有需要写了一个


--测试测下:
CREATE DATABASE [db1] 
CREATE DATABASE [db2] 

USE [db1]
CREATE TABLE [dbo].[table1]([id] [int],[name] [varchar](20)) 
CREATE TABLE [dbo].[table2]([id] [int],[name] [varchar](20)) 
CREATE TABLE [dbo].[table3]([id] [int],[name] [varchar](20)) 

USE [db2]
CREATE TABLE [dbo].[table4]([id] [int],[name] [varchar](20)) 
CREATE TABLE [dbo].[table5]([id] [int],[name] [varchar](20)) 
CREATE TABLE [dbo].[table6]([id] [int],[name] [varchar](20)) 



--格式如下(比较规律!):
select * from db1.dbo.table1
select * from db1.dbo.table2
select * from db1.dbo.table3

select * from db2.dbo.table4
select * from db2.dbo.table5
select * from db2.dbo.table6


select name from master.sys.databases where name like 'db[0-9]%' --数据库名称格式
select name from sys.tables where name like 'table[0-9]%'	--表名称格式


--不是动态创建,需手动指定:数据库格式名。表格式名,视图名称




--将数据库名和表名关联
--	drop table #db_table
create table #db_table(dbname varchar(50),tabname varchar(50),mk bit) 

declare @dbname varchar(50)
declare @exec varchar(max)
set @exec = ''
declare cur_db cursor for
select name from master.sys.databases where name like 'db[0-9]%' order by name --更改数据库名
open cur_db
fetch next from cur_db into @dbname
while @@FETCH_STATUS = 0
begin
	set @exec = 'select '''+@dbname+''',name,0 from ['+@dbname+'].sys.tables where name like ''table[0-9]%'' order by name '--更改表名
	insert into #db_table exec(@exec)
fetch next from cur_db into @dbname
end
close cur_db
deallocate cur_db


--	select * from #db_table
--	update #db_table set mk = 0



--将各表创建合并视图
set nocount on
declare @db_name Nvarchar(50)
declare @tab_name Nvarchar(50)
declare @col_name Nvarchar(4000)
declare @sql Nvarchar(max)
declare @sql1 Nvarchar(max)
set @sql1 = N''
set @col_name = N''
set @sql = N' create view v_table_all '+CHAR(10)+' as '+CHAR(10) --更改视图名称

while exists(select * from #db_table where mk=0)
begin
	select top 1 @db_name=dbname,@tab_name=tabname from #db_table where mk=0 
	set @col_name = ''
	
	set @sql1 = N'select @col_name = @col_name + name+'','' from ['+@db_name+'].sys.columns where object_id=object_id(''['+@db_name+'].dbo.['+@tab_name+']'')'
	exec sp_executesql @sql1,N'@col_name varchar(4000) output',@col_name =@col_name output
	
	set @col_name = left(@col_name,LEN(@col_name)-1)

	set @sql = @sql + ' select '+@col_name+' from ['+@db_name+'].dbo.['+@tab_name+'] union all'+CHAR(10)
	
	update #db_table set mk = 1 where dbname=@db_name and tabname=@tab_name
end
set @sql = left(@sql,LEN(@sql)-10)
set nocount off
print(@sql)
--exec(@sql)


/*--输出结果:
 create view v_table_all 
 as 
 select id,name from [db1].dbo.[table1] union all
 select id,name from [db1].dbo.[table2] union all
 select id,name from [db1].dbo.[table3] union all
 select id,name from [db2].dbo.[table4] union all
 select id,name from [db2].dbo.[table5] union all
 select id,name from [db2].dbo.[table6] 
*/




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值