想要在SQL Server中操作MySQL,首先要在SQL Server所在的服务器上安装MySQL的驱动。MySQL的驱动安装包在MySQL的官网上可以下载到,我下载到的安装包名为:mysql-connector-odbc-5.1.8-winx64,适用于64位的Windows服务器。双击安装包,直接[next]即可安装成功。安装成功后,在运行中输入[odbcad32.exe]打开[ODBC数据源管理器],点击[驱动程序]选项,可看到[MySQL ODBC 5.1 Driver]已安装成功。
安装好MySQL的驱动后就可以在SQL Server所在的服务器上建立指向MySQL服务器的ODBC数据源。
在[ODBC数据源管理器]中选择[系统 DSN]选项卡,点击[添加]按钮。
选择[MySQL ODBC 5.1 Driver],点击[完成]。
在弹出的配置框中填写数据源名、MySQL服务器IP、端口、用户名和密码,点击[ok],ODBC数据源创建成功。
建立链接服务器有两种方式,可以通过SQL Server Management Studio中的向导建立,也可以直接使用SQL语句建立。
在SQL Server Management Studio中连接上SQL Server,然后在[服务器对象]->[链接服务器]上点击右键,选择[新建连接服务器(N)…]。
在[链接服务器]框中填写自定义的链接服务器名称,[服务器类型]选择[其他数据源],[访问接口]选择”Microsoft OLE DB Provider for ODBC Drivers”,[产品名称]跟链接服务器名称填写成一样的,[数据源]填写刚才创建的ODBC数据源,点击[确定],链接服务器创建成功。
其实,也可以不建立ODBC数据源,直接建立链接服务器的,只要把[数据源]留空,而在[访问接口字符串]中填写链接字符串
“Driver={MySQL ODBC 5.1 Driver};Server=192.168.0.21;Database=test; User=root;Password=rootPassword;Option=3;”即可。如下图:
可以使用以下SQL语句创建链接服务器,其中使用了ODBC数据源:
EXEC master.dbo.sp_addlinkedserver
@server = N'TestMySQL', --链接服务器名
@srvproduct = N'TestMySQL', --产品名称
@provider = N'MSDASQL', --访问接口
@datasrc = N'TestServer' --数据源名称
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'TestMySQL',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO
也可以使用以下SQL语句创建链接服务器,其中没有使用ODBC数据源,使用的是访问接口字符串:
EXEC master.dbo.sp_addlinkedserver
@server = N'TestMySQL', --链接服务器名
@srvproduct = N'TestMySQL', --产品名称
@provider = N'MSDASQL', --访问接口
@provstr = N'Driver={MySQL ODBC 5.1 Driver};Server=192.168.0.21;Database=test; User=root;Password=rootPassword;Option=3;' --访问接口字符串
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'TestMySQL',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO
MySQL数据库test 中的数据表TestTable的结构如下:
操作该表的方法如下:
select * from openquery(TestMySQL,'select * from test.TestTable');
insert into openquery(TestMySQL,'select * from test.TestTable')
select 1,'TestName';
delete from openquery(TestMySQL,'select * from test.TestTable');
update openquery(TestMySQL,'select * from test.TestTable')
set TestName='ABCDE' where TestID=1;