SQL SERVER 2012/2014 鏈接到 SQL SERVER 2000的各種坑
本文總結(jié)一下SQL SERVER 2012/2014鏈接到SQL SERVER 2000的各種坑,都是在實(shí)際應(yīng)用中遇到的疑難雜癥。可能會(huì)有人說(shuō)怎么還在用SQL SERVER 2000,為什么不升級(jí)呢? 每個(gè)公司都會(huì)有一兩個(gè)幾乎快被人遺忘的系統(tǒng),接手維護(hù)這些系統(tǒng)的人可能都不知換了多少批了。它們的命運(yùn)注定慢慢消亡。然而偏偏卻又生命力頑強(qiáng),總還有一些人在使用著這些系統(tǒng)。所以就處在一種尷尬的境地: 升級(jí)吧,價(jià)值不大,可能再過(guò)一兩年,這系統(tǒng)就要被其它系統(tǒng)替代了。而且項(xiàng)目經(jīng)理也沒(méi)有精力、人手耗費(fèi)在這上面。最重要的是擔(dān)心風(fēng)險(xiǎn)問(wèn)題。因?yàn)榻邮志S護(hù)的人對(duì)這些系統(tǒng)都不甚了解。如果貿(mào)然升級(jí),可能風(fēng)險(xiǎn)很大。
1:SQL Server Native Client 11.0 does not support connections to SQL Server 2000 or earlier versions
自SQL Server 2012開(kāi)始,已經(jīng)不支持通過(guò)鏈接服務(wù)器鏈接到SQL Server 2000。主要是SQL SERVER 2012/2014安裝的是SQL Server Native Client 11.0。而SQL Server Native Client 11.0 does not support connections to SQL Server 2000 or earlier versions。關(guān)于這個(gè)官方文檔
已有說(shuō)明,具體如下所示:
This topic discusses how various data-access components can be used with SQL Server Native Client.
SQL Server Native Client 11.0 supports connections to SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, and Windows Azure SQL Database.
Supported Operating System Versions
The following table lists which operating systems support SQL Server Native Client.
SQL Server Native Client version |
Supported operating systems |
SQL Server Native Client (SQL Server 2005) |
|
SQL Server Native Client 10.0 (SQL Server 2008) |
|
SQL Server Native Client 10.5 (SQL Server 2008 R2) |
|
SQL Server Native Client 11.0 (SQL Server 2012) |
|
此時(shí)需要安裝SQL Server Native Client 10. 我在這篇文章SQL SERVER 2012鏈接到SQL SERVER 2000的問(wèn)題解決案例里面介紹了如何安裝SQL Server Native Client 10
2: 即使安裝了SQL Server Native Client 10,依然不能使用下面常規(guī)的建立鏈接服務(wù)器的方法建立
- EXEC master.dbo.sp_addlinkedserver @server = N'server_name', @srvproduct=N'SQL Server'
- EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'server_name',@useself=N'False',@locallogin=NULL,@rmtuser=N'username',@rmtpassword='########'
- GO
3:以下面方式建立鏈接服務(wù)器,能夠成功創(chuàng)建鏈接服務(wù)器,測(cè)試鏈接也OK,似乎一切OK
- EXEC master.dbo.sp_addlinkedserver @server = N'server_name', @srvproduct=N'SQLSERVER', @provider=N'SQLNCLI10', @provstr=N'DRIVER={SQL Server Native Client 10.0};SERVER=192.168.xxx.xxx;'
- EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'server_name',@useself=N'False',@locallogin=NULL,@rmtuser=N'username',@rmtpassword='########'
- GO
但是在調(diào)用鏈接服務(wù)器時(shí),就會(huì)出現(xiàn)下面錯(cuò)誤。
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "SQLNCLI10" for linked server "xxxxx" reported an error. Access denied.
Msg 7301, Level 16, State 2, Line 1
Cannot obtain the required interface ("IID_IDBCreateCommand") from OLE DB provider "SQLNCLI10" for linked server "xxxxx".
配置
4: OpenDataSource SQL Server Native Client 11.0 does not support connections to SQL Server 2000
如果代碼里面有使用OpenDataSource,那么就會(huì)報(bào)上面的錯(cuò)誤。此時(shí)必須修改為鏈接服務(wù)器方式訪問(wèn)。
SQL SERVER 2012/2014正確鏈接到SQL SERVER 2000的方法,
- EXEC master.dbo.sp_addlinkedserver @server = N'Server_Name', @srvproduct=N'sqlserver', @provider=N'MSDASQL', @provstr=N'DRIVER={SQL Server Native Client 10.0};SERVER=192.168.xxx.xxx;'
- EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Server_Name',@useself=N'False',@locallogin=NULL,@rmtuser=N'UserName',@rmtpassword='########'
- GO