sqlserver链接服务器到mysql#
SQL Server数据库如何添加mysql链接服务器(Windows系统)_sqlserver链接服务器mysql-CSDN博客
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| USE [master];
GO
-- ======【修改以下参数】======
DECLARE @LinkedServerName NVARCHAR(128) = N'MYSQLCON'; --链接服务器名
DECLARE @ODBC_DSN NVARCHAR(128) = N'mysql_odbc'; --mysqlodbc 名,必须保持一致
DECLARE @RemoteUser NVARCHAR(128) = N'admin'; --账号
DECLARE @RemotePassword NVARCHAR(128) = N'admin123'; --密码
-- ============================
-- 删除已存在的链接服务器
IF EXISTS (SELECT 1 FROM sys.servers WHERE name = @LinkedServerName)
EXEC sp_dropserver @LinkedServerName, 'droplogins';
-- 创建链接服务器(MSDASQL + ODBC DSN)
EXEC sp_addlinkedserver
@server = @LinkedServerName,
@provider = N'MSDASQL',
@srvproduct = N'MySQL',
@datasrc = @ODBC_DSN;
-- 设置登录凭据
EXEC sp_addlinkedsrvlogin
@rmtsrvname = @LinkedServerName,
@useself = N'False',
@locallogin = NULL,
@rmtuser = @RemoteUser,
@rmtpassword = @RemotePassword;
-- 【可选】仅保留关键选项(防中文乱码)
EXEC sp_serveroption @server = @LinkedServerName, @optname = N'use remote collation', @optvalue = N'true';
|
sqlserver链接服务器到mysql 无dsn#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| USE [master];
GO
-- ======【修改以下参数】======
DECLARE @LinkedServerName NVARCHAR(128) = N'MYSQLCON'; -- 链接服务器名称
DECLARE @MySQL_Host NVARCHAR(128) = N'127.0.0.1'; -- MySQL 服务器 IP 或主机名
DECLARE @MySQL_Port INT = 3306; -- MySQL 端口
DECLARE @MySQL_Database NVARCHAR(128) = N'gmsabdrmsdc'; -- 数据库名(可选,查询时可指定)
DECLARE @RemoteUser NVARCHAR(128) = N'admin'; -- MySQL 用户名
DECLARE @RemotePassword NVARCHAR(128) = N'admin123'; -- MySQL 密码
-- 注意:驱动名称必须与系统中安装的 MySQL ODBC 驱动完全一致!
DECLARE @DriverName NVARCHAR(256) = N'MySQL ODBC 8.1 Unicode Driver';
-- 常见驱动名还有:
-- 'MySQL ODBC 8.0 ANSI Driver'
-- 'MySQL ODBC 5.3 Unicode Driver'
-- 可通过 ODBC 数据源管理器查看
-- ============================
-- 删除已存在的链接服务器
IF EXISTS (SELECT 1 FROM sys.servers WHERE name = @LinkedServerName)
EXEC sp_dropserver @LinkedServerName, 'droplogins';
-- 构造连接字符串(关键!)
DECLARE @ProvStr NVARCHAR(1024);
SET @ProvStr =
N'DRIVER={' + @DriverName + N'};' +
N'SERVER=' + @MySQL_Host + N';' +
N'PORT=' + CAST(@MySQL_Port AS NVARCHAR(10)) + N';' +
CASE WHEN @MySQL_Database <> N'' THEN N'DATABASE=' + @MySQL_Database + N';' ELSE N'' END +
N'UID=' + @RemoteUser + N';' +
N'PWD=' + @RemotePassword + N';' +
N'OPTION=3;'; -- OPTION=3 表示启用 ANSI 引用符等,可选但推荐
-- 创建链接服务器(无 DSN)
EXEC sp_addlinkedserver
@server = @LinkedServerName,
@srvproduct = N'MySQL',
@provider = N'MSDASQL',
@provstr = @ProvStr;
-- 【重要】对于 MSDASQL 无 DSN,通常不需要再调用 sp_addlinkedsrvlogin!
-- 因为用户名/密码已在连接字符串中提供。
-- 但如果仍提示登录失败,可尝试添加(但一般不建议重复):
-- EXEC sp_addlinkedsrvlogin
-- @rmtsrvname = @LinkedServerName,
-- @useself = N'False',
-- @locallogin = NULL,
-- @rmtuser = @RemoteUser,
-- @rmtpassword = @RemotePassword;
-- 设置关键选项
EXEC sp_serveroption @server = @LinkedServerName, @optname = N'use remote collation', @optvalue = N'true';
EXEC sp_serveroption @server = @LinkedServerName, @optname = N'data access', @optvalue = N'true';
|
查询
1
| SELECT * FROM OPENQUERY(MYSQLCON, 'SELECT * from 表名');
|
sqlserver 链接服务器到sqlserver 无dsn#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| USE [master];
GO
-- 参数化(方便修改)
DECLARE @LinkedServerName NVARCHAR(128) = N'fkt';
DECLARE @RemoteHost NVARCHAR(128) = N'171.111.192.34,2431'; -- 替换为实际 IP,端口
DECLARE @RemoteUser NVARCHAR(128) = N'sa';
DECLARE @RemotePassword NVARCHAR(128) = N'@fkt123..';
-- 删除已存在的(可选,避免报错)
IF EXISTS (SELECT * FROM sys.servers WHERE name = @LinkedServerName)
EXEC sp_dropserver @LinkedServerName, 'droplogins';
-- 创建链接服务器
EXEC sp_addlinkedserver
@server = @LinkedServerName,
@provider = N'SQLNCLI',
@srvproduct = N'SqlServer',
@datasrc = @RemoteHost;
-- 设置登录凭据
EXEC sp_addlinkedsrvlogin
@rmtsrvname = @LinkedServerName,
@useself = N'False',
@locallogin = NULL,
@rmtuser = @RemoteUser,
@rmtpassword = @RemotePassword;
|
sqlserver 链接服务器 oracle
Instant Client for Microsoft Windows (x64) 64-bit
选择:
- Instant Client Package - Basic
- Instant Client Package - OLE DB(关键!)
- 版本需与 Oracle 服务器兼容(如 19c、21c)
注册 OLE DB 驱动(通常安装后自动注册)
驱动名称为:==OraOLEDB.Oracle==
配置 tnsnames.ora(可选但推荐)
文件路径示例:C:\oracle\instantclient_19_20\network\admin\tnsnames.ora
1
2
3
4
5
6
7
8
| ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.50)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
|
方式一:使用 TNS 别名(推荐,更清晰)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| USE [master];
GO
-- ======【修改参数】======
DECLARE @LinkedServerName NVARCHAR(128) = N'ORACLE_LS';
DECLARE @TNS_Alias NVARCHAR(128) = N'ORCL'; -- tnsnames.ora 中的别名
DECLARE @OracleUser NVARCHAR(128) = N'scott';
DECLARE @OraclePassword NVARCHAR(128) = N'tiger';
-- ========================
-- 删除已存在的
IF EXISTS (SELECT 1 FROM sys.servers WHERE name = @LinkedServerName)
EXEC sp_dropserver @LinkedServerName, 'droplogins';
-- 创建链接服务器(使用 TNS 别名)
EXEC sp_addlinkedserver
@server = @LinkedServerName,
@srvproduct = N'Oracle',
@provider = N'OraOLEDB.Oracle',
@datasrc = @TNS_Alias; -- 对应 tnsnames.ora 中的别名
-- 设置登录凭据
EXEC sp_addlinkedsrvlogin
@rmtsrvname = @LinkedServerName,
@useself = N'False',
@locallogin = NULL,
@rmtuser = @OracleUser,
@rmtpassword = @OraclePassword;
-- 设置关键选项
EXEC sp_serveroption @server = @LinkedServerName, @optname = N'data access', @optvalue = N'true';
EXEC sp_serveroption @server = @LinkedServerName, @optname = N'rpc out', @optvalue = N'true';
EXEC sp_serveroption @server = @LinkedServerName, @optname = N'collation compatible',@optvalue = N'false';
EXEC sp_serveroption @server = @LinkedServerName, @optname = N'use remote collation',@optvalue = N'true';
|
方式二:直接写连接字符串(无需 tnsnames.ora)
1
2
3
4
5
6
7
8
| -- 构造数据源(格式://host:port/service_name)
DECLARE @DataSource NVARCHAR(256) = N'//192.168.1.50:1521/orcl';
EXEC sp_addlinkedserver
@server = N'ORACLE_LS',
@srvproduct = N'Oracle',
@provider = N'OraOLEDB.Oracle',
@datasrc = @DataSource;
|
查询
1
2
3
4
5
| -- 测试查询(注意 Oracle 表名大写!)
SELECT * FROM OPENQUERY(ORACLE_LS, 'SELECT * FROM SCOTT.EMP WHERE ROWNUM <= 5');
-- 或使用四部分命名(不推荐,可能有元数据问题)
-- SELECT * FROM ORACLE_LS..SCOTT.EMP;
|
sqlserver链接oracle数据库 ODBC + DSN-less#
需要instantclient_21_19 包含odbc_install.exe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| USE [master];
GO
DECLARE @ProvStr NVARCHAR(1024);
SET @ProvStr =
N'DRIVER={Oracle in instantclient_21_19};' +
N'DBQ=153.0.165.91:16161/orcl;' + -- ← 关键!使用 DBQ + EZ Connect
N'UID=dherp_bzk;' +
N'PWD=qwer1234;';
-- 删除已存在的链接服务器
IF EXISTS (SELECT 1 FROM sys.servers WHERE name = N'ORACLE_LS')
EXEC sp_dropserver N'ORACLE_LS', 'droplogins';
-- 创建链接服务器
EXEC sp_addlinkedserver
@server = N'ORACLE_LS',
@srvproduct = N'Oracle',
@provider = N'MSDASQL',
@provstr = @ProvStr;
-- 启用数据访问
EXEC sp_serveroption @server = N'ORACLE_LS', @optname = N'data access', @optvalue = N'true';
|