使用驱动程序{SQL SERVER}与Native Client

时间:2017-01-31 16:29:21

标签: sql-server vba odbc pyodbc

这个问题更多的是关于“为什么”。在连接字符串中指定DRIVER={SQL Server Native Client 11.0}时,varchar(max)列将返回空白。这个问题似乎已经持续多年,并且存在一些变通方法。

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 Server”(SQLSRV32.DLL日期为2010)。

在Windows上的VBA或Python中,传递{SQL Server}是否选择了上述两者中较新的一个?使用{SQL Server}而不是{SQL Server Native Client 11.0}时会丢失任何功能,如果是这样,它们会是什么?有更好的解决方法吗?

1 个答案:

答案 0 :(得分:2)

  

在Windows上的VBA或Python中,传递{SQL Server}是否选择了上述两者中较新的一个?

没有。 {SQL Server}只是Windows附带的(非常旧的)SQL Server驱动程序的名称。它仍然在很多地方使用,但它不支持SQL Server的新功能,并且可能已经被弃用了很长时间。

事实上,{SQL Server Native Client ...}驱动程序已经的家族也被弃用,以支持{ODBC Driver __ for SQL Server}驱动程序(其中__目前是17,13或11) 。但是,正如微软所做的那样,它有changed its mind和“不推荐”的OLE DB访问方法(以前称为“SQLNCLI11”,现在称为“MSOLEDBSQL”)。