多分库多分表(结构相同)脚本创建联合视图
创建 脚本 结构 视图 联合 相同 分表 分库
2023-09-27 14:28:00 时间
--今天有需要写了一个
--测试测下:
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 = Nselect @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]
*/
霜皮剥落紫龙鳞,下里巴人再谈数据库SQL优化,索引(一级/二级/聚簇/非聚簇)原理 举凡后端面试,面试官不言数据库则已,言则必称SQL优化,说起SQL优化,网络上各种“指南”和“圣经”难以枚举,不一而足,仿佛SQL优化已然是妇孺皆知的理论常识,然后根据多数无知(Pluralistic ignorance)理论,人们印象里觉得多数人会怎么想怎么做,但这种印象往往是不准确的。那SQL优化到底应该怎么做?本次让我们褪去SQL华丽的躯壳,以最浅显,最粗俗,最下里巴人的方式讲解一下SQL优化的前因后果,前世今生。
Mysql数据库表字段设计优化(状态列) 初始状态码(java int 32 long 64),int 可以表示31种(除去0000),long可以表示63种(除去0000),当然不可能将0000赋值给初始状态,一般来讲,选择int还是long是根据具体业务需求来决定的。
列表查询的通用优化方案 列表查询是服务端开发中非常高频的诉求,接口的性能往往会跟用户体验强关联。本文通过一个具体的例子,来总结服务端写查询接口时的通用优化方案。 ## 一个例子 ### 功能诉求 给出一个具体的例子,背景是根据内容ID来查询内容信息(如下),目标是通过编码优化使得这个查询效率变快,减少上游(客户端App或外部服务)的等待时间。 ```java public interfa
mysql使用 from两表查询与join两表查询区别 在mysql中,多表连接查询是很常见的需求,在使用多表查询时,可以from多个表,也可以使用join连接连个表这两种查询有什么区别?哪种查询的效率更高呢? 带着这些疑问,决定动手试试1.先在本地的mysql上先建两个表one和twoone表 CREATE TABLE `one` ( `id`.
--测试测下:
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 = Nselect @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]
*/
霜皮剥落紫龙鳞,下里巴人再谈数据库SQL优化,索引(一级/二级/聚簇/非聚簇)原理 举凡后端面试,面试官不言数据库则已,言则必称SQL优化,说起SQL优化,网络上各种“指南”和“圣经”难以枚举,不一而足,仿佛SQL优化已然是妇孺皆知的理论常识,然后根据多数无知(Pluralistic ignorance)理论,人们印象里觉得多数人会怎么想怎么做,但这种印象往往是不准确的。那SQL优化到底应该怎么做?本次让我们褪去SQL华丽的躯壳,以最浅显,最粗俗,最下里巴人的方式讲解一下SQL优化的前因后果,前世今生。
Mysql数据库表字段设计优化(状态列) 初始状态码(java int 32 long 64),int 可以表示31种(除去0000),long可以表示63种(除去0000),当然不可能将0000赋值给初始状态,一般来讲,选择int还是long是根据具体业务需求来决定的。
列表查询的通用优化方案 列表查询是服务端开发中非常高频的诉求,接口的性能往往会跟用户体验强关联。本文通过一个具体的例子,来总结服务端写查询接口时的通用优化方案。 ## 一个例子 ### 功能诉求 给出一个具体的例子,背景是根据内容ID来查询内容信息(如下),目标是通过编码优化使得这个查询效率变快,减少上游(客户端App或外部服务)的等待时间。 ```java public interfa
mysql使用 from两表查询与join两表查询区别 在mysql中,多表连接查询是很常见的需求,在使用多表查询时,可以from多个表,也可以使用join连接连个表这两种查询有什么区别?哪种查询的效率更高呢? 带着这些疑问,决定动手试试1.先在本地的mysql上先建两个表one和twoone表 CREATE TABLE `one` ( `id`.
相关文章
- Java入门系列之字符串创建方式、判断相等
- 「六」创建一个带 weblogic 服务的基础镜像
- WebService创建、发布及在IIS上部署
- 51EasyUI 树形菜单- 创建异步树形菜单
- 《Lua游戏AI开发指南》一2.7 创建一个沙箱Lua脚本
- NSDictionary字典创建,获取,遍历,可变字典的删除 - iOS
- HarmonyOS鸿蒙开发之06 通过代码创建页面 Feature Ability(教程含源码)
- php归档格式:phar文件详解(创建、使用、解包还原提取)
- Linux虚拟机创建后如何进行登录(Windows Azure)
- 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---07
- 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---06
- 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---01