根据之前的一些想法,如果有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)

  

得到结果 测试

最新文章

  1. 在centos 7.0上利用yum一键安装mono
  2. USB设备的基本概念
  3. windows和linux环境下制作U盘启动盘
  4. Linux高级字符设备驱动
  5. 解决BLOB/TEXT column can't have a default value query问题
  6. 用C#来查看电脑硬件和系统信息
  7. 请给出异步加载js方案
  8. js 中创建对象
  9. Ambari概览
  10. OSI模型和TCP/IP协议族(二)
  11. Windows下免安装版mysql5.7的初始密码
  12. PAT1102: Invert a Binary Tree
  13. 【转载】路径双反斜杠!!!Python IDLE或Python shell中切换路径 切换目录os.chdir("C:\\python37\\2019pythonshel37\\diedai")
  14. List<T>集合的Sort自定义排序用法简单解析
  15. python数学第二天【泰勒展开式】
  16. Redis——redis使用redis-dump,redis-load导出导入数据——【三】
  17. windows下给redis添加密码
  18. Tomcat源码学习(1)
  19. 【MongoDB】MongoDB的一些操作命令
  20. Groovy使用List集合

热门文章

  1. UI状态控制
  2. BUG,带给我的思考
  3. SpringBoot之旅 -- 定时任务两种(Spring Schedule 与 Quartz 整合 )实现
  4. iOS截屏保存至相册
  5. Team Foundation Server 基本功能
  6. Winform自定义控件在界面上拖动、滚动鼠标。。会闪烁的解决方法
  7. 使用slice和concat对数组的深拷贝和浅拷贝
  8. php+apache+mysql的安装
  9. canvas基础—图形变换
  10. Android开发之启动模式的深入理解