【发布时间】:2017-08-11 15:27:10
【问题描述】:
我想创建一个链接到 MySQL 的服务器,但我不想引用 DSN,因为设置它需要更多的管理开销。在许多环境中,我通常可以将 DSN 替换为连接字符串,该连接字符串包含通常使用 DSN 配置和保存的所有数据位。使用 MySQL 链接服务器我没有成功。
我的最后一次尝试使用了这个(清理过的)脚本:
USE [master]
GO
DECLARE @LinkedServer VARCHAR(20)
SET @LinkedServer = 'MYSQL_DSNLESS'
IF EXISTS ( SELECT * FROM sys.servers WHERE [name] = @LinkedServer )
EXEC sp_dropserver @server = @LinkedServer, @droplogins = 'droplogins'
EXEC master.dbo.sp_addlinkedserver
@server = @LinkedServer
,@srvproduct = @LinkedServer
,@datasrc = @LinkedServer
,@provider = N'MSDASQL'
,@provstr = N'DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=servername;PORT=3306;DATABASE=mysqlschemaname;USER=mysqlusername;PASSWORD=mysqlpassword;OPTION=3'
,@catalog = N'ecn'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = @LinkedServer, @useself = N'False', @locallogin = NULL, @rmtuser = N'mysqlusername', @rmtpassword = 'mysqlpassword'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'collation compatible', @optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'data access', @optvalue = N'true'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'dist', @optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'pub', @optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'rpc', @optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'rpc out', @optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'sub', @optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'connect timeout', @optvalue = N'0'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'collation name', @optvalue = NULL
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'lazy schema validation', @optvalue = N'false'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'query timeout', @optvalue = N'0'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'use remote collation', @optvalue = N'true'
EXEC master.dbo.sp_serveroption @server = @LinkedServer, @optname = N'remote proc transaction promotion', @optvalue = N'true'
GO
此脚本运行并创建链接服务器对象,但是当我尝试运行这样的查询时:
SELECT * FROM OPENQUERY(MYSQL_DSNLESS, 'SELECT * FROM mysqlschemaname.table01')
我收到此错误:
OLE DB provider "MSDASQL" for linked server "MYSQL_DSNLESS" returned message "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "MYSQL_DSNLESS".
这种技术是否有效?如果有效,需要进行哪些更改才能使其发挥作用?
【问题讨论】:
-
你是问能不能做一个没有数据源的数据源?
-
没有。我想创建一个没有 DSN 的链接服务器。
-
在您的情况下,DSN 引用了 ODBC 连接,因此如果您使用的是 ODBC 数据源,则不能在没有 ODBC 数据源的情况下创建链接服务器。
标签: mysql sql-server odbc