不同数据库之间的相互链接
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');
http://www.jb51.net/article/30903.htm
MSSQL连接ORACLE
在MSSQL中,导出导入 Oracle数据库的时候
1.Microsoft OLE DB Provider for Oracle 可以使用 TNS 或 IP/服务名 或 机器名/服务名
2.Oracle Provider for OLE DB 可以使用 TNS 或 IP/服务名 或 机器名/服务名
这里的 TNS (必须是和MSSQL32或64位对应的的ODAC相关版本 \Network\Admin\tnsnames.ora 中定义的)
如果连接的时候提示 error while trying to retrieve text for error ora-01019 可能是
安装的Oracle Client连接库是否和原来在系统里的库有冲突. 有时会出现, 之前安装了其他数据库服务器, 有相同的库, 但是是老版本, 所以要在使用Oracle之前, 把环境变量设置好,增加ORACLE_HOME这个环境变量,指向ORACLE的安装目录.你可能装过几次ORACLE 客户端 http://bbs.csdn.net/topics/390677745
这个时候必须设置环境变量 ORACLE_HOME ,如果是64位的,则这样设置后则VS中服务资源管理器就不能连Oracle了。
还好这种情况不常出现,出现的时候变通处理一下,毕竟MSSQL导入导出用的比较少。
不能连接可能问题:
i.如果同时安装了32位和64位的oracle client,则必须在path环境变量中将32的路径写在前面
ii.如果只安装ORACLE数据库和MSSQL数据库安装在同一台服务器上,可以不安装oracle client。
打开注册表-->HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL????????????\Providers
新建 OraOLEDB.Oracle 项,并在此项下面建立名AllowInProcess,类型为DWORD Value,值为00000001,保存后立即生效