有时候业务需要把SqlServce库中某张表的数据同步到MySql中,或者MySql数据库中的某张表数据导入到SqlServer库中。Navicat并不能满足,Navicat中只能同类型数据库数据同步,也不能灵活动态的导入,比如像数据的实时同步等...比较好的解决方案就是在Microsoft SQL Server Management Studio中配置MySql的数据源,这样就能灵活动态的同步数据。
1. 打开windows管理工具进入ODBC(数据源)
2. 准备需要的驱动
首先确定是否已经安装需要连接的数据库ODBC驱动程序
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编码,根据数据库表的编码选择否则会报错:字符串截断)
配置ODBC连接属性
test连接Success表示连接成功,最后保存即可
1. 打开SQL Server Management Studio新建连接服务器
2. 配置连接服务器
3. 添加访问账号
4. 修改服务器选项
最后保存即可,注意配置数据源和SQL Server Management Studio链接服务器都需要在SqlServer数据库所在机器上配置
配置完成可以看到链接服务器中已有配置的mysql链接服务器
最后通过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
新增删除参照修改