根据之前的一些想法,如果有A,B 两个数据库, 如果把A 用户通过界面产生的更新或者插入修改,操作的数据同步更新到B 库中,如果允许延时2分钟以内

想法一: 通过创建触发器 把变更的数据和对应的表名称统一存储到某个特定的表,然后通过程序获取转换成sql 更新B数据库中的表,本文主要说明使用该方法

想法二: 通过CDC 记录变更的内容, 园内搜索:  SQL Server 变更数据捕获(CDC)监控表数据  即可 。

以下是测试:

drop  database  T_Mytest

create  database  T_Mytest

 -- 创建修改表
use T_Mytest
create table Mytest
(
id int null ,
name nvarchar (20) null ,
OwndStore int null ) -- 创建记录修改了那个数据库,那张表的记录
create table testdatabaseLog
(
ID int identity not null ,
State int null ,-- 同步状态 0表示初始数据没有同步 ,1 表示已经同步需要插入的文件数据 ChangeTableName nvarchar (25) null , -- 更新了哪个数据库表
createdatetime datetime null ,
ActionType int null , -- 1插入 2更新 3 删除
ActionName nvarchar(20) null ,
Content nvarchar (max) null , -- 更新后的内容
FromStore int null , -- 该数据来自那个门店数据库 标识
ToStore int null , -- 同步到那个门店进行处理
)
go

  

二  创建重要的触发器语句 , 可以应用到所有需要同步的表中,只需要在创建的时候增加触发器即可,

不需要修改里面的内容,只需要修改触发器名称 和应该到哪张表即可

CREATE TRIGGER [dbo].[itrg_triggerTest]  ON [dbo].[Mytest]
after insert , update ,delete
AS
set nocount on
--查询该触发器触发的表
--SELECT @@PROCID, OBJECT_NAME( @@PROCID )
declare @tableName nvarchar(25) ; --宣告变量
DECLARE @D BIT = 0
DECLARE @I BIT = 0 declare @content nvarchar(max) ;
declare @actiontype int ;
declare @actionName nvarchar(15) ;
IF EXISTS(SELECT TOP 1 1 FROM DELETED)
begin
SET @D = 1
end IF EXISTS(SELECT TOP 1 1 FROM INSERTED)
begin
SET @I = 1
end IF @I = 1 AND @D = 0
begin
set @actiontype=1 ;
set @actionName='Insert'
--select N'插入'+'insert into '
select @content= (select * from inserted for xml path)+'' -- select * from inserted for xml path(@tableName),root('insert')
end
else IF @I = 1 AND @D = 1
begin
set @actiontype=2 ;
set @actionName='Update' ;
select @content= (select * from inserted for xml path)+'' ; end
else
begin set @actiontype=3 ;
set @actionName='Delete'
--select N'删除'+'insert into '
select @content= (select * from deleted for xml path)+'' ;
end if ( @content is not null )
begin SELECT @tableName =OBJECT_SCHEMA_NAME( parent_id ) + '.' + OBJECT_NAME( parent_id ) FROM sys.triggers WHERE object_id = @@PROCID insert into testdatabaseLog
(
ChangeTableName ,
createdatetime ,
ActionType ,
ActionName ,
content,FromStore)
values ( @tableName ,GETDATE() , @actiontype, @actionName ,@content, 1) ;
end GO

  

-- 测试数据
insert into Mytest values (1,'苹果',1)
insert into Mytest values (2,'雪梨',1)
insert into Mytest values (3,'香蕉',1)

  

得到结果 测试

捕获mssqlservice 修改表后的数据,统一存储到特定的表中,之后通过代码同步两个库的数据的更多相关文章

  1. servletActionContext.getContext默认获取contextmap 数据默认存储在contextmap的request中

  2. 关于跨DB增量(增、改)同步两张表的数据小技巧

    有些场景下,需要隔离不同的DB,彼此DB之间不能互相访问,但实际的业务场景又需要从A DB访问B DB的情形,这时怎么办?我认为有如下常规的三种方案: 1.双方提供RESET API,需要访问不同DB ...

  3. Hive 表操作(HIVE的数据存储、数据库、表、分区、分桶)

    1.Hive的数据存储 Hive的数据存储基于Hadoop HDFS Hive没有专门的数据存储格式 存储结构主要包括:数据库.文件.表.试图 Hive默认可以直接加载文本文件(TextFile),还 ...

  4. MySQL的数据文件存储

    MySQL的数据文件存储 MyISAM引擎分为:静态.动态和压缩MyISAM三种: 静态MyISAM:如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型.因为数据表中每一条记录所 ...

  5. Mysql分表和分区的区别、分库和分表区别

    一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法. 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个 ...

  6. 【Cocos2d-X开发学习笔记】第30期:游戏中数据的存储(下)

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.对数据进行编解码 在上一期中,我们使用了CC ...

  7. A、B同时打开一个页面进行同一条数据库记录进行修改,A修改完成后提交表单,A修改的数据保存完成后;当B也修改完成后,提交数据进行数据修改。此时B修改的内容会覆盖A修改的内容,请问如何避免?

    A.B同时打开一个页面进行数据中的一条数据进行修改,A修改完成后提交表单,数据修改保存完成后B开始页面也修改完成,开始提交进行修改.此时B修改的内容会覆盖A的内容,请问如何避免? 通过搜索和我个人总结 ...

  8. netfilter的钩子——数据包在内核态得捕获、修改和转发

    转发:http://blog.csdn.net/stonesharp/article/details/27091391 数据包在内核态得捕获.修改和转发(基于 netfilter)    忙活了好几天 ...

  9. MySql数据库在表中添加新字段,设置主键,设置外键,字段移动位置,以及修改数据库后如何进行部署和维护的总结

    1,为当前已有的表添加新的字段 alter table student add studentName varchar(20) not null; 2,为当前已有的表中的字段设置为主键自增 alter ...

随机推荐

  1. 3097: Hash Killer I

    3097: Hash Killer I Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 425  Solved: 15 ...

  2. 腾讯QQ会员技术团队:人人都可以做深度学习应用:入门篇(下)

    四.经典入门demo:识别手写数字(MNIST) 常规的编程入门有"Hello world"程序,而深度学习的入门程序则是MNIST,一个识别28*28像素的图片中的手写数字的程序 ...

  3. Knockoutjs : Unable to process binding "value:

    刚刚自学knockoutjs,老是碰到稀奇古怪的问题. 在自学knockout.js的时候经常遇到 Unable to process binding "value:的问题.目前总结了以下几 ...

  4. JavaEE开发基于Eclipse的环境搭建以及Maven Web App的创建

    本篇博客就完整的来聊一下如何在Eclipse中创建的Maven Project.本篇博客是JavaEE开发的开篇,也是基础.本篇博客的内容干货还是比较多的,而且比较实用,并且都是采用目前最新版本的工具 ...

  5. 基于GDAL的遥感影像显示(C#版)

    基于GDAL的遥感影像显示(C#版) - 菜菜的专栏 - 博客频道 - CSDN.NET  http://blog.csdn.net/RSyaoxin/article/details/9220735

  6. Cannot use ImageField because Pillow is not installed.

    现象描述: 使用 ImageField ,创建数据库表时,提示如下: Cannot use ImageField because Pillow is not installed. HINT: Get ...

  7. CSS 去掉点li 的点

    转:http://blog.sina.com.cn/s/blog_63b13c300100jyek.html 方法一: <ul> <li style="list-style ...

  8. RabbitMQ-从基础到实战(4)— 消息的交换(下)

    0.目录 RabbitMQ-从基础到实战(1)- Hello RabbitMQ RabbitMQ-从基础到实战(2)- 防止消息丢失 RabbitMQ-从基础到实战(3)- 消息的交换(上) 1.简介 ...

  9. (3)简单说说java中的异常体系

    java异常体系 |--Throwable 实现类描述java的错误和异常 一般交由硬件处理 |--Error(错误)一般不通过代码去处理,一般由硬件保护 |--Exception(异常) |--Ru ...

  10. 源码分析——从AIDL的使用开始理解Binder进程间通信的流程

    源码分析——从AIDL的使用开始理解Binder进程间通信的流程 Binder通信是Android系统架构的基础.本文尝试从AIDL的使用开始理解系统的Binder通信. 0x00 一个AIDL的例子 ...