2017-01-31 102 views
2

這個問題更多地是關於「爲什麼」。當您在連接字符串中指定DRIVER={SQL Server Native Client 11.0}時,varchar(max)列將返回空白。這個問題似乎多年來一直存在,並且存在一些解決方法。使用驅動程序{SQL SERVER}與Native Client有什麼區別

https://connect.microsoft.com/SQLServer/feedback/details/419996/sql-native-client-returning-blank-fields-to-excel

https://connect.microsoft.com/SQLServer/feedback/details/467300/problem-with-varchar-max-via-sql-native-client

雖然似乎瘋了,這些問題依然存在,一個有效的解決辦法,建議通過:

https://stackoverflow.com/a/33883901/4258124

是改變連接字符串使用方法:

DRIVER={SQL Server}...(rest of connection string) 

代替:

DRIVER={SQL Server Native Client 11.0} ...(rest of connection string) 

我想這一點,和它的作品,但我的問題是更多的「爲什麼」。如果DRIVER={SQL SERVER}是一個較舊的驅動程序,當我傳遞MultiSubnetFailover = Yes/True等新功能時它如何能夠連接?

我發現我已經安裝(Windows中,從odbcad32.exe的>驅動程序) 「SQL Server ODBC驅動程序11」(MSODBCSQL11.DLL月2014)和 「SQL服務器」(SQLSRV32.DLL日期爲2010年)。

在VBA或Python的Windows中,確實通過{SQL Server}選擇了上面兩個更新的?在使用{SQL Server}而不是{SQL Server Native Client 11.0}時,是否會丟失任何功能?如果有,它們會是什麼?有更好的解決方法嗎?

+1

您是否嘗試過使用DRIVER = {ODBC Driver 11 for SQL Server}?您似乎在說它已安裝,並且它會比SQL Server Native Client 11.0(SQLNCLI11.DLL,大約2012年)更新。 –

+0

另外,驗證'pyodbc.version'返回'4.0.3'。 pyodbc已經有一些相當新的變化可以解決這個問題。 –

+0

謝謝,我試過DRIVER = {ODBC Driver 11 for SQL Server},它也可以工作;而且我認爲更新的說法是有道理的,它會考慮到最新的功能,所以我不應該擔心它們之間的差異。仍然好奇,但我應該讓它去哈哈 – NikT

回答

2

在Windows的VBA或Python中,是否通過{SQL Server}挑選上述兩者中的較新者?

編號{SQL Server}只是Windows附帶的(非常陳舊的)SQL Server驅動程序的名稱。它仍然在很多地方使用,但它不支持SQL Server的新功能,並且現在可能已經過時很長時間了。

事實上,{SQL Server Native Client ...}司機的家庭也被棄用,贊成{ODBC Driver __ for SQL Server}驅動程序(其中__目前是13或11)。

+1

我證實(max)列上的數據返回使用SQL Server的ODBC驅動程序11,這是比我嘗試的本機客戶端和SQL Server驅動程序更新,所以這是最有意義的使用它,謝謝! – NikT

+2

如果你對Python和SQL Server做任何事情,我強烈建議升級到ODBC驅動程序13而不是11,因爲11有一些相當重要的問題(尤其是圍繞線程)。例如,要讓Django的runserver以11運行,您需要使用'--nthreading'運行時參數。 – FlipperPA

相關問題