【SQL SERVER】SQL SERVER數據庫實時同步到MySQL

SQL Server 數據實時同步到MySQL中(先做記錄,待會兒再詳細規劃)

EXEC sp_addlinkedserver
@server='YCGA_MySQL', --ODBC裏面data source name 上圖記住的名字
@srvproduct='MySQL', --自己隨便
@provider='MSDASQL', --固定這個
@datasrc=NULL,
@location=NULL,
@provstr='DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=IP地址;DATABASE=數據庫名;UID=richard;PORT=3306;',   
--這裏面的參數,分別是驅動名稱,比如我的是MySQL ODBC 8.0 一般只改下版本號就可以,後面是數據庫地址,數據庫名,UID就是唯一標識這個自己起就行,最後的是數據庫端口號
@catalog = NULL

exec sp_addlinkedsrvlogin
@rmtsrvname='YCGA_MySQL' ,----ODBC裏面data source name 跟上面的一樣
@useself='false' ,
@rmtuser='賬號' ,---mysql賬號
@rmtpassword='密碼' ;--mysql賬號其密碼

select * from openquery(YCGA_MySQL,'SELECT * FROM xinhu_A04; ')

EXEC sp_addlinkedserver @server=N'loopback',@srvproduct=N' ',@provider=N'SQLNCLI',
@datasrc=@@SERVERNAME
GO

--select * from openquery(YCGA_MySQL,'SELECT * FROM xinhu_A04; ')

USE [master]
GO
EXEC master.dbo.sp_serveroption @server=N'loopback',@optname=N'rpc out',@optvalue=N'TRUE'
GO
EXEC master.dbo.sp_serveroption @server=N'loopback',@optname=N'remote proc transaction promotion',@optvalue=N'false'
GO


USE [master]
GO
EXEC master.dbo.sp_serveroption @server=N'loopback',@optname=N'rpc out',@optvalue=N'TRUE'
GO
EXEC master.dbo.sp_serveroption @server=N'loopback',@optname=N'remote proc transaction promotion',@optvalue=N'false'
GO

USE [YC_HR]
GO
EXEC YC_HR.dbo.sp_serveroption @server=N'loopback',@optname=N'rpc out',@optvalue=N'TRUE'
GO
EXEC YC_HR.dbo.sp_serveroption @server=N'loopback',@optname=N'remote proc transaction promotion',@optvalue=N'false'
GO


CREATE PROCEDURE A34_INSERT
@PersonID VARCHAR,
@DispOrder INT,
@A3405 VARCHAR,
@A3410 VARCHAR,
@E3401 VARCHAR
AS
BEGIN
SET NOCOUNT ON
            INSERT OPENQUERY(YCGA_MySQL, 'select * from xinhu_A34')(PersonID,DispOrder,A3405,A3410,E3401) values (@PersonID,@DispOrder,@A3405,@A3410,@E3401);
SET NOCOUNT OFF
END


CREATE TRIGGER SRV_A34_INSERT ON  loopback.yc_hr.dbo.A34
FOR INSERT
AS
DECLARE 
@PersonID VARCHAR,
@DispOrder INT,
@A3405 VARCHAR,
@A3410 VARCHAR,
@E3401 VARCHAR
SELECT @PersonID=PersonID,@DispOrder=DispOrder,@A3405=A3405,@A3410=A3410,@E3401=E3401 FROM INSERTED;
BEGIN
EXEC loopback.yc_hr.dbo.A34_insert @PersonID,@DispOrder,@A3405,@A3410,@E3401;
END

SELECT * from loopback.yc_hr.dbo.A34;


CREATE TRIGGER SRV_A34_INSERT ON  YC_HR.dbo.A34
FOR INSERT
AS
DECLARE 
@PersonID VARCHAR,
@DispOrder INT,
@A3405 VARCHAR,
@A3410 VARCHAR,
@E3401 VARCHAR
SELECT @PersonID=PersonID,@DispOrder=DispOrder,@A3405=A3405,@A3410=A3410,@E3401=E3401 FROM INSERTED;
BEGIN
EXEC loopback.yc_hr.dbo.A34_insert @PersonID,@DispOrder,@A3405,@A3410,@E3401;
END


CREATE PROCEDURE A17_INSERT
@PersonID VARCHAR(10),
@DispOrder INT,
@E1701 VARCHAR(1),
@E1703 VARCHAR(20),
@E1705 datetime,
@E1709 datetime
AS
BEGIN
SET NOCOUNT ON
            INSERT OPENQUERY(YCGA_MySQL, 'select * from xinhu_A17')(PersonID,DispOrder,E1701,E1703,E1705,E1709) values (@PersonID,@DispOrder,@E1701,@E1703,@E1705,@E1709);
SET NOCOUNT OFF
END


--聲明數據庫引用
use YC_HR;
go

--判斷是否存在,如果存在則刪除
if exists(select * from sys.triggers where name='SRV_A17_INSERT')

--刪除DML觸發器
drop trigger SRV_A17_INSERT;

----刪除DDL觸發器
drop trigger SRV_A17_INSERT on database;

--刪除登錄觸發器
drop trigger SRV_A17_INSERT on all server;
go

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章