• 实战:sqlserver 数据实时同步到mysql


    1.安装安装mysqlconnector


    2.配置mysqlconnector

    ODBC数据管理器->系统DSN->加入->mysql ODBC 5.3 ANSI driver->填入data source name如jt,mysql的ip、username、password就可以


    3.新建链接server


    exec sp_addlinkedserver
     @server='jt',       --ODBC里面data source name
     @srvproduct='mysql',    --自己随便
     @provider='MSDASQL',    --固定这个
     @datasrc=NULL,
     @location=NULL,
     @provstr='DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=192.168.5.188;DATABASE=suzhou;UID=root;PORT=3306;',   
    @catalog = NULL


    exec sp_addlinkedsrvlogin
      @rmtsrvname='jt',
      @useself='false',
      @rmtuser='root',
      @rmtpassword='password';
     
     
      select * from openquery(jt,'SELECT * FROM sz ; ')
      GO
     
     

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


    ---4.sqlserver和mysql新建库和表

    create database suzhou;

    create table sz(
    id int not null  identity(1,1) primary key,
    orderno char(20) not null,
    ordertime datetime not null default getdate(),
    remark varchar(200)
    )
    go

    create table sz(
    id int(11) not null ,
    orderno char(20) not null,
    ordertime datetime(6) not null ,
    remark varchar(200),
    primary key (id)
    ) engine=innodb  default charset=utf8;

    ---5.建立回环
     --建立LOOPBACK server链接

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


    --设置server链接选项,阻止SQL Server 因为远过程调用而将本地事务提升为分布事务(重点)
    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


    ----6.编写触发器和存储过程

    ----6.1 insert

    --重写触发器
    use suzhou
    go
    alter trigger tr_insert_sz on suzhou.dbo.sz
    for insert
    as
    declare  @id   int, @orderno  char(20),@ordertime datetime,@remark  varchar(200)
    select @id=id,@orderno=orderno,@ordertime=ordertime,@remark =remark from inserted;
    begin
    print @id
    print @orderno
    print @ordertime
    print @remark
    exec loopback.suzhou.dbo.sp_insert @id,@orderno,@ordertime,@remark
    end
    go

    --存储过程
    use suzhou
    go
    create PROCEDURE sp_insert(
    @id   int,
    @orderno  char(20),
    @ordertime datetime,
    @remark  varchar(200)
    )
    AS
    BEGIN
    SET NOCOUNT ON;
    Insert openquery(jt, 'select * from sz')(id,orderno,ordertime,remark)values(@id,@orderno,@ordertime,@remark)
    END
    go


    ----6.2 update

    --重写触发器
    use suzhou
    go
    create trigger tr_update_sz on suzhou.dbo.sz
    for update
    as
    declare  @orderno  char(20),@remark  varchar(200)
    select @orderno=orderno,@remark =remark from inserted;
    begin
    exec loopback.suzhou.dbo.sp_update @orderno,@remark
    end
    go

    --存储过程
    use suzhou
    go
    create PROCEDURE sp_update(
    @orderno  char(20),
    @remark  varchar(200)
    )
    AS
    BEGIN
    SET NOCOUNT ON;
    update openquery(jt, 'select * from sz') set remark=@remark where orderno=@orderno
    END
    go


    ---update数据測试

    use suzhou
    go
    update sz set remark='ocpyang' where orderno='a001'
    go


    ----6.3 delete

    --重写触发器
    use suzhou
    go
    create trigger tr_delete_sz on suzhou.dbo.sz
    for delete
    as
    declare  @orderno  char(20)
    select @orderno=orderno from deleted;
    begin
    exec loopback.suzhou.dbo.sp_delete @orderno
    end
    go

    --存储过程
    use suzhou
    go
    create PROCEDURE sp_delete(
    @orderno  char(20)
    )
    AS
    BEGIN
    SET NOCOUNT ON;
    delete openquery(jt, 'select * from sz')  where orderno=@orderno
    END
    go


    ---delete数据測试

    use suzhou
    go
    delete from sz where orderno='a001'
    go


     

  • 相关阅读:
    Delphi 消息窗口 Application.messagebox
    delphi绑定ComboBox数据
    delphi ComboBox AddObject 组合框下拉取值正确使用方法
    属性分类及其实现
    Delphi 在dbgrideh中表格输入数据时有效性的检查(转)
    XE下显示托盘图标(TrayIcon)
    delphi trayIcon控件,如何实现窗口最小化的时候到系统托盘?
    一步步开发自己的博客 番外篇(7、异步记录日志 和 文章阅读量统计)
    一步步开发自己的博客 .NET版 剧终篇(6、响应式布局 和 自定义样式)
    一步步开发自己的博客 .NET版(5、Lucenne.Net 和 必应站内搜索)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5334995.html
Copyright © 2020-2023  润新知