MSSQL链接MYSQL数据库方法:
前提条件(系统安装MYODBC,这个可以到MYSQL官网上去下载)
1.使用TSQL建立(建立成功不代表可以查询)
直接使用连接字符串
EXEC master.dbo.sp_addlinkedserver @server = N‘MYSQL1‘, @srvproduct=N‘MySQL‘, @provider=N‘MSDASQL‘, @provstr=N‘DRIVER={MySQL ODBC 3.51 Driver}; SERVER=127.0.0.1; DATABASE=test; USER=root; PASSWORD=root; OPTION=3‘
EXEC master.dbo.sp_addlinkedserver @server = N‘MYSQL2‘, @srvproduct=N‘MySQL‘, @provider=N‘MSDASQL‘, @provstr=N‘DRIVER={MySQL ODBC 5.3 UNICODE Driver}; SERVER=127.0.0.1; DATABASE=test; USER=root; PASSWORD=root; OPTION=3‘
其中 MySQL ODBC 3.51 Driver MySQL ODBC 5.3 UNICODE Driver ,这个需要到“管理”--“ODBC”中查看具体机器上装的MYODBC的版本
在ODBC数据源管理器中--系统DNS建立一个MYSQL的连接
EXEC master.dbo.sp_addlinkedserver @server = N‘MYSQL3‘, @srvproduct=N‘MySQL‘, @provider=N‘MSDASQL‘, @datasrc=N‘odbc2mysql3‘, @catalog=N‘test‘
2.在MSSQL管理器UI中建立
注意(数据源和连接字符串只能用一个,两者是冲突的,这个要特别注意)
链接完成后,对数据的操作方式(现在MYSQL不支持four-part names)
网络上说MYODBC不支持
sql链接服务器链接mysql http://bbs.csdn.net/topics/380106204
OLE DB Providers Tested with SQL Server http://msdn.microsoft.com/en-us/library/ms187072.aspx
-- 把SQL SERVER里的TT表的记录插入到MYSQL的T1表里,这这里也可以插入具体值。
INSERT OPENQUERY(MySQLTest,‘select * from t1‘) select * from TT;
INSERT OPENQUERY(MySQLTest,‘select * from t1‘) values (99,99,99);
-- 对T1表进行UPDATE操作
UPDATE OPENQUERY(MySQLTest,‘select value from t1‘) set value=value +100;
-- 对T1表进行DELETE 操作,不明白为什么一次只能删除一条,
DELETE OPENQUERY (MySQLTest, ‘SELECT * FROM t1 WHERE hour = 99‘);
DELETE OPENQUERY (MySQLTest, ‘SELECT * FROM t1 ‘);
-- DELETE OPENQUERY (MySQLTest, ‘SELECT * FROM t1 WHERE hour > 2‘); --这样是不行的,报错
/*
链接服务器"MySQLTest"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "键列信息不足或不正确。更新影响到多行。"。
消息 7345,级别 16,状态 1,第 1 行
链接服务器 "MySQLTest" 的 OLE DB 访问接口 "MSDASQL" 无法从表 "SELECT * FROM t1 WHERE hour > 2" 删除数据。更新操作不满足架构要求。
*/
-- 对T1表进行查询操作
select * from openquery(MySQLTest,‘select * from t1‘);
-- 把MYSQL的T1表的记录写回到MSSQL
insert into TT select * from openquery(MySQLTest,‘select * from t1‘);