这周在搞数据同步的功能 说是什么数据c库到a库 a库到b库 现在要改成c库直接到b库 由于各种各样的原因吧 这两天才搞明白实现方案是:b库创建一个到c库的链接 然后写个存储过程 让sqlserver的作业定时执行这个存储过程 实现定时同步
上sql
1. 创建链接
EXEC sp_addlinkedserver
@server='MJZFPT',
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='172.16.111.111'
GO
EXEC sp_addlinkedsrvlogin
'MJZFPT',
'false',
NULL,
'sa',
'111'
GO
exec sp_serveroption
'MJZFPT','rpc out','true'
GO
exec sp_serveroption
'MJZFPT','rpc','true'
GO
2. 同步数据的存储过程
use DB_JY
go
create PROCEDURE [dbo
].[spGetJzsJBXXFromMJZFPT
]
AS
BEGIN
MERGE DB_JY
.dbo
.T_ZF_JBXX
AS T
USING (SELECT DBO
.FN_INNEREX_GETZFXH
(C_ZFBH
) N_ZFXH
,[C_ZFBH
]
,[C_XM
]
,[C_XB
]
,[D_CSRQ
]
,[C_MZ
]
,[C_JG
]
,[C_FYLB
]
,[D_RJRQ
]
,[C_SZJY
]
,[C_SZJQ
] C_SZFJQ
,[C_ZYBS
] N_ZYBS
FROM MJZFPT
.[DB_ZF
].[dbo
].[T_ZF
]
WHERE C_SZJY
in ('73878031185de329fa6876725c100013','73878031185de329fa6876725c100014','73878031185de329fa6876725c100015')
) AS S
ON (T
.N_ZFXH
= S
.N_ZFXH
)
WHEN MATCHED THEN
UPDATE SET N_ZFXH
= S
.N_ZFXH
, C_ZFBH
= S
.C_ZFBH
, C_XM
= S
.C_XM
, C_XB
= S
.C_XB
,
D_CSRQ
= S
.D_CSRQ
, C_MZ
= S
.C_MZ
, C_JG
= S
.C_JG
, C_FYLB
= S
.C_FYLB
, D_RJRQ
= S
.D_RJRQ
, C_SZJY
= S
.C_SZJY
,
C_SZFJQ
= S
.C_SZFJQ
,N_ZYBS
=S
.N_ZYBS
WHEN NOT MATCHED BY TARGET
THEN
INSERT (N_ZFXH
, C_ZFBH
, C_XM
, C_XB
, D_CSRQ
, C_MZ
, C_JG
, C_FYLB
, D_RJRQ
, C_SZJY
, C_SZFJQ
,N_ZYBS
)
VALUES (S
.N_ZFXH
, S
.C_ZFBH
, S
.C_XM
, S
.C_XB
, S
.D_CSRQ
, S
.C_MZ
, S
.C_JG
, S
.C_FYLB
, S
.D_RJRQ
, S
.C_SZJY
, S
.C_SZFJQ
,N_ZYBS
);
END
思路就是两个表根据N_ZFXH字段进行对比 如果匹配 说明T表数据存在 做更新操作 如果不存在做插入操作
3. 作业
在这里搞个作业 步骤里添加EXEC spGetJzsJBXXFromMJZFPT
定时执行作业