博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多分库多分表(结构相同)脚本创建联合视图
阅读量:6684 次
发布时间:2019-06-25

本文共 3082 字,大约阅读时间需要 10 分钟。

--
今天有需要写了一个  
  

  

--
测试测下:  
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]   
*/
  

转载地址:http://vkoao.baihongyu.com/

你可能感兴趣的文章
工作区配置 4
查看>>
Android开发工程师,前行路上的14项技能
查看>>
w 查看系统负载 uptime vmsta 详解 top 详解 sar 命令 free 命令
查看>>
ps 查看进 netstat 查看端口
查看>>
网页图表Highcharts实践教程之认识Highcharts
查看>>
LPC2103学习之GPIO
查看>>
管理岗是什么鬼?
查看>>
创建一个当前时间凌晨
查看>>
Python 学习笔记 - 多进程和进程池
查看>>
日志切割实例
查看>>
CentOS安装中文汉字输入法ibus
查看>>
【环境配置】DOSBox运行TT打字软件
查看>>
Android中处理Touch Icon的方案
查看>>
RHEL7.1配置本地yum源
查看>>
Mybatis Generator最完整配置详解
查看>>
Hash学习
查看>>
PHP按符号截取字符串的指定部分
查看>>
在Blender导出格式为STL
查看>>
我的友情链接
查看>>
酒有两不喝,财有两不发,忙有三不帮,亲有三不走!
查看>>