zl程序教程

您现在的位置是:首页 >  其它

当前栏目

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

创建 脚本 结构 视图 联合 相同 分表 分库
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`.