2024年6月6日

源服务器

初始化同步数据表

SELECT * INTO 【用于同步数据的表名】
FROM (
SELECT top 0
CT.SYS_CHANGE_VERSION,
CT.SYS_CHANGE_OPERATION,
CT.【同步数据表的主键ID】
FROM CHANGETABLE(CHANGES 源数据表名, 0) AS CT ) t


创建获取同步数据存储过程

TRUNCATE TABLE 【用于同步数据的表名】

INSERT INTO 【用于同步数据的表名】
(SYS_CHANGE_VERSION,SYS_CHANGE_OPERATION,【同步数据表的主键ID】)

SELECT
CT.SYS_CHANGE_VERSION,
CT.SYS_CHANGE_OPERATION,
CT.【同步数据表的主键ID】
FROM CHANGETABLE(CHANGES dbo.源数据表名, @last_sync_version) AS CT

订阅服务器

同步作业
创建同步记录表SyncTable

DECLARE @currentVersion BIGINT,@maxVersion bigInt
DECLARE @tableName nvarchar(100)
SET @tableName=''同步表名''
SELECT @currentVersion=SyncVersion FROM [dbo].[SyncTable] WHERE @tableName=tableName AND IsInitOver=1
---判断是否已经初始化完成
IF @currentVersion IS NOT null
BEGIN
EXEC xiaoben.SchoolBasic.dbo.[GetSyncData2] ''同步表名'',@currentVersion【最新版本】
DECLARE @insertCount INT,@updateCount INT,@deleteCount INT,@ChangeCount INT
SELECT @ChangeCount=COUNT(1),
@insertCount=ISNULL(SUM(CASE WHEN SYS_CHANGE_OPERATION=''I'' THEN 1 ELSE 0 end),0),
@deleteCount=ISNULL(SUM(CASE WHEN SYS_CHANGE_OPERATION=''D'' THEN 1 ELSE 0 end),0),
@updateCount=ISNULL(SUM(CASE WHEN SYS_CHANGE_OPERATION=''U'' THEN 1 ELSE 0 end),0)
FROM xiaoben.SchoolBasic.dbo.sync_tempSCHB_Account_UserInfo2
---开始批量插入
IF (@ChangeCount>0)
BEGIN

IF (@insertCount>0)
BEGIN
PRINT ''开始新增''
SET IDENTITY_INSERT [表名] ON

---新增先删除目标库存在的ID数据
INSERT INTO [dbo].[表名]
(【列名】
)
SELECT
t1.[列名]

FROM 【linkserver的名称】.[数据库的名称].dbo.[同步数据视图]  t1
WHERE t1.SYS_CHANGE_OPERATION=''I'' AND NOT EXISTS (SELECT [UserInfoID] FROM [dbo].[SCHB_Account_UserInfo] ttt WHERE ttt.[UserInfoID]=t1.[UserInfoID])

SET IDENTITY_INSERT [表名] OFF

END

IF @updateCount>0
BEGIN
---开始批量修改
PRINT ''开始修改''

UPDATE [表名] SET
[列名]=t.[列名]
,[列名]=t.[列名]

FROM (
select
t1.[列名]
,t1.[列名]

FROM 【linkserver的名称】.[数据库的名称].dbo.[同步数据视图] t1
WHERE t1.SYS_CHANGE_OPERATION=''U'') t where t.[表主键]=[表名].[表主键]
END

IF @deleteCount>0
BEGIN
---开始批量删除
PRINT ''开始删除''
DELETE FROM [表名] WHERE 【表主键】 IN(
SELECT 表主键 FROM 【linkserver的名称】.[数据库的名称].dbo.[同步数据视图]  WHERE SYS_CHANGE_OPERATION=''D''
)
END

INSERT INTO [dbo].[TableChangeLog]
([TableName]
,[SYS_CHANGE_VERSION]
,[SYS_CHANGE_OPERATION]
,[ID])
select
''表名''
,[SYS_CHANGE_VERSION]
,[SYS_CHANGE_OPERATION]
,[表主键] from 【linkserver的名称】.[数据库的名称].dbo.[同步数据视图] 

SELECT @currentVersion=MAX(SYS_CHANGE_VERSION) FROM 【linkserver的名称】.[数据库的名称].dbo.[同步数据视图] 
IF @currentVersion IS NOT NULL
BEGIN
PRINT ''更新版本''
UPDATE [dbo].[SyncTable] SET SyncVersion=@currentVersion WHERE @tableName=tableName AND IsInitOver=1
end
END
ELSE
BEGIN
PRINT ''无数据更新''
END
END

posted @ 2024-06-06 09:28 我的地盘,我做主 阅读(17) 评论(0) 推荐(0) 编辑
摘要: USE [master]GO /****** Object: LinkedServer [链接名称] Script Date: 2024/6/6 9:09:53 ******/EXEC master.dbo.sp_addlinkedserver @server = N'链接名称', @srvprod 阅读全文
posted @ 2024-06-06 09:11 我的地盘,我做主 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 1、数据库CT 开启 ALTER DATABASE [数据库名] SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 【Ct日志保留天数】 DAYS, AUTO_CLEANUP = ON);关闭 ALTER DATABASE [数据库名]SET CHANGE_T 阅读全文
posted @ 2024-06-06 09:08 我的地盘,我做主 阅读(32) 评论(0) 推荐(0) 编辑
  2014年3月27日
摘要: 要完整版不是官方版的试用版。下面包括有的文件安装前请册除原有的FR控件。1. "Tools|Environmet options..."中的"Library"标签面下"Library path"添加FastReport路径。 FastReport\FastQB FastReport\FastScript FastReport\Source FastReport\Source\BDE FastReport\Source\ADO FastReport\Source\IBX FastReport\Source\DBX FastReport\ 阅读全文
posted @ 2014-03-27 17:47 我的地盘,我做主 阅读(253) 评论(0) 推荐(0) 编辑
  2013年12月9日
摘要: 本节主要内容:1.如何读取Binding中的binding元素。2.CustomBinding元素的基本配置。3.代码示例一、Bingding是由binding元素构成的,可以根据实际需要,进行适当的选择进行组合。下面的一段代码可以帮助你查看Binding中包含的binding元素。1 NetTcpBinding binding = new NetTcpBinding();2 foreach (BindingElement element in binding.CreateBindingElements())3 {4 ... 阅读全文
posted @ 2013-12-09 11:34 我的地盘,我做主 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 在从客户端向WCF服务端传送较大数据(>65535B)的时候,发现程序直接从Reference的BeginInvoke跳到EndInvoke,没有进入服务端的Service实际逻辑中,怀疑是由于数据过大超出限定导致的。问题是我实际发送的数据是刚刚从WCF服务端接收过来的,一来一去,数据量差别并不大。然后发现,在客户端和服务端实际使用的是不同的配置,对于客户端,在添加ServiceReference时自动生成的ServiceReferences.ClientConfig文件中system.serviceModel节下有这样的设置: ... 阅读全文
posted @ 2013-12-09 11:32 我的地盘,我做主 阅读(149) 评论(0) 推荐(0) 编辑
  2013年3月21日
摘要: http://runjs.cn/code/9ulk0r39 阅读全文
posted @ 2013-03-21 16:15 我的地盘,我做主 阅读(100) 评论(0) 推荐(0) 编辑
  2013年2月27日
摘要: 增加ADOQuery1.Close ;ADOQuery1.SQL.Clear;str:='insert into PGUSER (loginName) values('''+ edit1.Text +''')';ADOQuery1.SQL.Add(str);ADOQuery1.ExecSQL;删除beginADOQuery1.Close ;ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add('DELETE PGUSER where loginName='''+ edit1.T 阅读全文
posted @ 2013-02-27 15:51 我的地盘,我做主 阅读(105) 评论(0) 推荐(0) 编辑
摘要: select * from sysprocesses where dbid in( SELECT dbid FROM master.dbo.sysdatabases WHERE NAME='DB_CEMS' ) 阅读全文
posted @ 2013-02-27 15:48 我的地盘,我做主 阅读(106) 评论(0) 推荐(0) 编辑
摘要: .net 中通过 SqlConnection 连接 sql server,我们会发现第一次连接时总是很耗时,但后面连接就很快,这个其实和SqlConnection 的连接池机制有关,正确的理解这个连接池机制,有助于我们编写高效的数据库应用程序。很多人认为 SqlConnection 的连接是不耗时的,理由是循环执行 SqlConnection.Open 得到的平均时间几乎为0,但每次首次open 时,耗时又往往达到几个毫秒到几秒不等,这又是为什么呢?首先我们看一下 MSDN 上的权威文档上是怎么说的Connecting to a database server typically consis 阅读全文
posted @ 2013-02-27 11:19 我的地盘,我做主 阅读(238) 评论(0) 推荐(0) 编辑



点击右上角即可分享
微信分享提示