这可能看起来过于冗长,但我很高兴在被问到问题时得到所有详细信息,所以我在这里做同样的事情:
我有一种情况,我在本地运行 SQL Server 开发版,并希望使用链接服务器和同义词来创建使用我的开发/测试环境中其他服务器上的数据的视图。我是一名开发人员,其机器设置与我组中的其他开发机器相同,他们在执行此操作时没有遇到任何困难。但是,对于我的盒子上的任何链接服务器,我在测试连接时收到以下错误:
现在,这些链接服务器都没有设置为使用 MSOLEDBSQL 作为提供程序。我明确告诉它使用 SQLNCLI11:
执行 master.dbo.sp_addlinkedserver @server = N'srvTest'、@srvproduct=N'sql_server'、@provider=N'SQLNCLI11'、@datasrc=N'已编辑'
并在链接服务器的属性窗口中验证:
事实上,我系统上的每个链接服务器(包括构建我的盒子时出现的链接服务器)都指定 SQL Server 本机客户端作为提供程序,但它们都失败并出现提及 MSOLEDBSQL 的错误。那么问题1:这到底是从哪里来的?这不是我指定的提供商!
我尝试过的:
首先,显而易见的是。我去了 Microsoft,下载了 MSOLEDBSQL 提供程序并安装了它。
我仍然失败。
所以我仔细检查自己:
好的,我显式下载了 MSOLEDBSQL,最终得到了一个名为 MSOLEDBSQL19 的提供程序。啥??? ‘19’? 好吧,也许我可以接受这个,即使我在创建链接服务器时指定的提供程序似乎被忽略了:
产量:
所以我想也许我正在做某件事并感到兴奋并测试连接,却发现我已经从煎锅里掉进了火里:
老实说,我认为我已经陷入了困境,因为 SQL 绝对坚持寻找“MSOLEDBSQL”,即使我已显式配置链接服务器以使用本机 SQLNCLI11。我认为我所做的最后一次尝试可能是由于 MSOLEDBSQL19 提供程序和我们的整体安全性的问题,但我不认为我应该必须从这条路开始。 SQLNCLI11 在我的组织中随处可见,我认为我应该能够接受它。
我团队中的所有其他开发人员都在使用 SQLNCLI11,他们在链接服务器方面没有任何问题。
谷歌在这里没有帮助。我看到一些帖子说“哦,编辑您的注册表以显式命名 MSSQLOLEDB 提供程序”,但是,正如前面提到的,当我从 Microsoft 下载该提供程序时,我得到了 MSSQLOLEDB19,而且,正如我所展示的,它是一个已知的提供程序在我的系统上!
我确实对你撒了谎...我说我们的设置完全相同,但一些开发人员看到的是 SQL Server 开发版本的版本 15,而我正在运行版本 16:
我想这可能是一个解释,但对我来说,这种错误(如果确实如此的话)会出现在 V16 中但尚未被发现,这对我来说似乎很奇怪。
最后一件事,我要闭嘴了:我们的环境中确实有一个开发服务器,恰好运行着 V15 开发者版本。我可以使用 SSMS 连接到该服务器,并“测试连接”到任何链接服务器,它运行得很好。