自动生成数据同步存储过程的存储过程

最近几天都在搞数据库,特别是今天,因为需要,自己写了一个自动生成同步数据存储过程的存储过程。。。废话不多少,直接上代码:


 --开始
--create proc exec_copy
--as
--begin
--因为同步的表是内网表,基本不做业务逻辑处理,所以所有的表都没有标示列,故我也就没做标示列的处理
set nocount on
declare @tab_count int --存放用户表的数量
declare @col_count int --存放某个表中列的数量
declare @str_sql varchar(max)--存放动态生成的T-SQL语句
set @tab_count=(select count(object_id) from sys.objects where type_desc=‘USER_TABLE‘)--查询当前数据库中用户表的数量
--print @tab_count
declare @jishu_tab int
set @jishu_tab=1
declare @object_id int--存放某个表的object_id
while (@jishu_tab<=@tab_count)--循环数据库中的所有用户表
begin
set @object_id=(select top 1 object_id from sys.objects where type_desc=‘USER_TABLE‘ and name=‘表名‘)--根据指定表名,如果要同步一个数据库
      --可以注释掉name=‘‘把下面的取消注释
--object_id not in(select top(@jishu_tab-1) object_id from sys.objects where type_desc=‘USER_TABLE‘))--查询第@jishu个表的object_id
declare @tab_name varchar(50);
set @tab_name=(select name from sys.objects where object_id=@object_id)--根据查询出的object_id查询表名
declare @schema varchar(50)--存放表架构
set @schema=(select b.name from sys.objects a
left join sys.schemas b on
a.schema_id=b.schema_id
where a.name=@tab_name)--根据表明查询表的架构
set @str_sql=‘create proc ‘+@tab_name+‘_pro as begin /*set identity_insert dataName.‘+@tab_name+‘ on*/ delete dataName.‘+@tab_name+‘ where ‘
declare @pk_col varchar(50)--存放主键列名
--创建一个游标
declare cur_my cursor scroll for select d.name from sys.objects as a
left join sys.indexes as b on a.object_id=b.object_id and b.is_primary_key=1
left join sys.sysindexkeys as c on b.index_id=c.indid and c.id=a.object_id
left join sys.syscolumns as d on c.colid=d.colid and d.id=a.object_id
where a.name=@tab_name
open cur_my--打开游标
fetch first from cur_my into @pk_col
--print @str_sql
set @str_sql=@str_sql+@pk_col+‘ in(select ‘+@pk_col+‘ from ‘+@schema+‘.‘+@tab_name+‘)‘
while(@@fetch_status=0)
begin
fetch next from cur_my into @pk_col
if(@@fetch_status=0)
begin
set @str_sql=@str_sql+‘ and ‘+@pk_col+‘ in(select ‘+@pk_col+‘ from ‘+@schema+‘.‘+@tab_name+‘)‘
end
end
--print @str_sql
close cur_my--关闭游标
deallocate cur_my--删除创建的游标
set @col_count=(select count(name) from sys.syscolumns where id=@object_id)
declare @jishu_col int
set @jishu_col=1
declare @all_name varchar(max)
while(@jishu_col<=@col_count)
begin
declare @col_name varchar(50)--存放查询出的列名
set @col_name=(select top 1 name from sys.syscolumns where id=@object_id and name not in ( select top (@jishu_col-1) name from sys.syscolumns where id=@object_id))
if(@jishu_col=1)
begin
--set @[email protected][email protected]_name+‘ in(select ‘[email protected]_name+‘ from ‘[email protected]_name+‘)‘
set @all_name=@col_name+‘,‘
set @str_sql=@str_sql+‘ insert into dataName.‘+@tab_name+‘(cols)‘+‘ select cols from ‘+@schema+‘.‘+@tab_name
end

if(@jishu_col=@col_count)
begin
set @all_name=@all_name+@col_name
end
else
if(@jishu_col!=1)
set @all_name=@all_name+@col_name+‘,‘
set @jishu_col=@jishu_col+1 --自增
end

set @str_sql=@str_sql+‘/* set identity_insert dataName.‘+@tab_name+‘ off*/ end‘
set @str_sql=replace(@str_sql,‘cols‘,@all_name)
set @str_sql=replace(@str_sql,‘dataName‘,‘shenpan_text.‘+@schema)
print @str_sql
set @jishu_tab=@jishu_tab+1--自增
break
end
set nocount off
--end
--结束

感觉还有很多缺点,望各位博友多多指教。

时间: 2024-10-13 23:52:22

自动生成数据同步存储过程的存储过程的相关文章

hibernate中.hbm.xml和注解方式自动生成数据表的简单实例(由新手小白编写,仅适用新手小白)

绝逼新手小白,so 请大神指点! 如果真的错的太多,错的太离谱,错的误导了其他小伙伴,还望大神请勿喷,大神请担待,大神请高抬贵嘴......谢谢. 好了,正题 刚接触ssh,今天在搞使用.hbm.xml文件 和 注解方式 来自动生成数据表 其中只是整了spring.hibernate,struts部分没有整.也就是说我只是测试了能够自动生成数据表(自动生成为"标准",自认为是对的......) 下面是配置和代码: 使用工具:myeclipse 2014 ,其中web project项目

跟我一起学extjs5(35--单个模块的设计[3根据类的标注自动生成数据])

跟我一起学extjs5(35--单个模块的设计[3根据类的标注自动生成数据]) 然后在hibernate.cfg.xml中加入: <mapping class="com.jfok.server.hibernate.system._ModuleField" /> <mapping class="com.jfok.server.hibernate.system._ModuleGridScheme" /> <mapping class=&qu

centos7中配置rsync+inotify实现自动监控数据同步

rsync服务可以实现数据的同步,但不是自动同步,所以在一些网站服务等, 需要用到inotify进行自动监控. 实验环境:centos7 两台 能互相ping通对方.一台为源端,一台为发起端. 该实验博主源端地址:192.168.60.135 发起端地址:192.168.60.136 http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz 这是inotify网址,进网站响应很慢,耐心等待. 一.源

根据模板自动生成数据

#首先需将系统时间设置为每个月的第一个周一,然后运行此脚本 $wbs = 0..3 $sheets = 1..5 $rows = 4..6 #142 $definition = 1..40 | ForEach-Object {"rev. " + $_.ToString().PadLeft(3,"0")} $date = Get-Date $mins = 1..23 $secs = 1..59 $time = foreach($min in $mins) { fore

hibernate 自动生成数据库表

只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表 <property name="hibernate.hbm2ddl.auto">update</property> update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失.

spring和mybatis集成,自动生成model、mapper,增加mybatis分页功能

软件简介 Spring是一个流行的控制反转(IoC)和面向切面(AOP)的容器框架,在java webapp开发中使用广泛.http://projects.spring.io/spring-framework/ MyBatis是一个基于Java的数据持久层框架,其原名是iBatis,在升级到3.0版本后,更名为MyBatis.https://github.com/mybatis/mybatis-3/ MyBatis Generator是一个MyBatis的代码生成器,通过配置,可自动生成数据操作

SpringBoot 添加mybatis generator 自动生成代码插件

自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version> <

数据同步存储过程

USE [TKPOS_WuJing]GO/****** Object: StoredProcedure [dbo].[sp_get_saleData] Script Date: 07/21/2014 11:20:54 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO -- =============================================-- Author: 陈新光-- Create date: 2014-05-28

转:Swagger2自动生成接口文档和Mock模拟数据

转自:https://www.cnblogs.com/vipstone/p/9841716.html 一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 问题二.返回数据操作难:数据返回不对或者不够怎么办?怎么才能灵活的操作数据? 这是很多公司前后端分离之后带来的困扰,那怎么来解决这些问题? 问题一的一般解决方案:后端团队共同维护一个在线文档,每次改接口再