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

简介:
-- 今天有需要写了一个  
  
  
-- 测试测下:  
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]   
*/   
目录
相关文章
|
3月前
|
存储 算法 关系型数据库
Mycat【Mycat分片技术(水平拆分-分表、ER表、全局表)】(五)-全面详解(学习总结---从入门到深化)
Mycat【Mycat分片技术(水平拆分-分表、ER表、全局表)】(五)-全面详解(学习总结---从入门到深化)
54 0
|
5月前
|
SQL 存储 分布式数据库
分库分表索引设计:二级索引、全局索引的最佳设计实践
对主键来说,要保证在所有分片中都唯一,它本质上就是一个全局唯一的索引。如果用大部分同学喜欢的自增作为主键,就会发现存在很大的问题。
|
6月前
|
SQL 存储 分布式数据库
分库分表索引设计:分布式环境下的 主键索引、二级索引、全局索引的最佳设计实践
分库分表索引设计:分布式环境下的 主键索引、二级索引、全局索引的最佳设计实践
59 0
|
SQL 存储 缓存
霜皮剥落紫龙鳞,下里巴人再谈数据库SQL优化,索引(一级/二级/聚簇/非聚簇)原理
举凡后端面试,面试官不言数据库则已,言则必称SQL优化,说起SQL优化,网络上各种“指南”和“圣经”难以枚举,不一而足,仿佛SQL优化已然是妇孺皆知的理论常识,然后根据多数无知(Pluralistic ignorance)理论,人们印象里觉得多数人会怎么想怎么做,但这种印象往往是不准确的。那SQL优化到底应该怎么做?本次让我们褪去SQL华丽的躯壳,以最浅显,最粗俗,最下里巴人的方式讲解一下SQL优化的前因后果,前世今生。
霜皮剥落紫龙鳞,下里巴人再谈数据库SQL优化,索引(一级/二级/聚簇/非聚簇)原理
|
SQL 中间件 关系型数据库
MyCat - 分片 - 垂直拆分 - 全局表配置 | 学习笔记
快速学习 MyCat - 分片 - 垂直拆分 - 全局表配置
110 0
MyCat - 分片 - 垂直拆分 - 全局表配置 | 学习笔记
|
数据库
8_数据表的操作(重点)
8_数据表的操作(重点)
73 0
|
算法
哈希表数据结构模板
哈希表数据结构模板
79 0