SqlServer数据库数据数导入到MySql数据库中

  • 背景说明

有时候业务需要把SqlServce库中某张表的数据同步到MySql中,或者MySql数据库中的某张表数据导入到SqlServer库中。Navicat并不能满足,Navicat中只能同类型数据库数据同步,也不能灵活动态的导入,比如像数据的实时同步等...比较好的解决方案就是在Microsoft SQL Server Management Studio中配置MySql的数据源,这样就能灵活动态的同步数据。

  • 配置MySql ODBC(数据源)

1. 打开windows管理工具进入ODBC(数据源)

SqlServer数据库数据数导入到MySql数据库中_第1张图片

2. 准备需要的驱动

首先确定是否已经安装需要连接的数据库ODBC驱动程序

SqlServer数据库数据数导入到MySql数据库中_第2张图片

MySqlODBC驱动下载连接(根据系统下载对应的驱动):https://dev.mysql.com/downloads/connector/odbc/

安装驱动时若提示需要安装Visual Studio可在此下载:https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

3. 配置MySQL ODBC数据源

点击“系统DSN”标签栏右侧添加,选择mysqlODBC驱动(注意ANSI还是Unicode编码,根据数据库表的编码选择否则会报错:字符串截断)

SqlServer数据库数据数导入到MySql数据库中_第3张图片

配置ODBC连接属性

SqlServer数据库数据数导入到MySql数据库中_第4张图片

test连接Success表示连接成功,最后保存即可

SqlServer数据库数据数导入到MySql数据库中_第5张图片

  • SQL Server Management Studio中配置链接服务器

1. 打开SQL Server Management Studio新建连接服务器

SqlServer数据库数据数导入到MySql数据库中_第6张图片

2. 配置连接服务器

SqlServer数据库数据数导入到MySql数据库中_第7张图片

3. 添加访问账号

SqlServer数据库数据数导入到MySql数据库中_第8张图片

4. 修改服务器选项

SqlServer数据库数据数导入到MySql数据库中_第9张图片

最后保存即可,注意配置数据源和SQL Server Management Studio链接服务器都需要在SqlServer数据库所在机器上配置

配置完成可以看到链接服务器中已有配置的mysql链接服务器

SqlServer数据库数据数导入到MySql数据库中_第10张图片

最后通过sql看是否能查询数据

select * from openquery(MYSQL,'SELECT * FROM risk.bank_credit_user;')

GO

sqlserver数据库中数据导入到mysql库中(mysql数据导入sqlser反过来即可)


insert into openquery (MYSQL,'SELECT * FROM risk.bank_credit_user;')  select * from CreditAPI.dbo.bank_credit_user(nolock)
GO

数据实时同步,设置回路服务器否则会开启分布式事务

--建立LOOPBACK 服务器链接 (回路)
EXEC sp_addlinkedserver @server=N'loopback',@srvproduct=N' ',@provider=N'SQLNCLI',
@datasrc=@@SERVERNAME
go
--设置服务器链接选项,阻止SQL Server 由于远过程调用而将本地事务提升为分布事务(重点)
USE admin_tset
GO
EXEC admin_tset.dbo.sp_serveroption @server=N'loopback',@optname=N'rpc out',@optvalue=N'TRUE'
GO
EXEC admin_tset.dbo.sp_serveroption @server=N'loopback',@optname=N'remote proc transaction promotion',@optvalue=N'false'
GO


USE admin_tset

---update
CREATE TRIGGER TR_UPDATE_USER ON admin_tset .DBO. t_user
FOR UPDATE
AS
DECLARE @ID INT,@AGE INT
SELECT @ID =id, @AGE=age FROM INSERTED;
BEGIN
                 EXEC loopback.admin_tset. dbo.sp_update @ID,@AGE;
END
 
CREATE PROCEDURE SP_UPDATE
 @ID INT, @AGE INT
AS
BEGIN
                 SET NOCOUNT ON
                                 UPDATE OPENQUERY (MYSQL, 'select * from demo_test.t_user;') set age=@AGE where sid =@ID
                 SET NOCOUNT OFF
END

新增删除参照修改

你可能感兴趣的:(sql,sql,sqlserver,mysql,数据库)