使用驱动程序 {SQL SERVER} 与 Native Client 有什么区别

Nik*_*ikT 3 sql-server odbc vba 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

虽然这些问题仍然存在似乎很疯狂,但有效的解决方法是由以下人员建议的:

/sf/answers/2371873101/

是更改连接字符串以使用:

DRIVER={SQL Server}...(rest of connection string)
Run Code Online (Sandbox Code Playgroud)

代替:

DRIVER={SQL Server Native Client 11.0} ...(rest of connection string)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了,它有效,但我的问题更多是关于“为什么”。如果DRIVER={SQL SERVER}是较旧的驱动程序,当我传递 MultiSubnetFailover=Yes/True 等新功能时,它如何能够连接?

我注意到我已经安装了(Windows,从 odbcad32.exe > 驱动程序)“ODBC Driver 11 for SQL Server”(MSODBCSQL11.DLL,日期为 2014 年)和“SQL Server”(SQLSRV32.DLL,日期为 2010 年)。

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

Gor*_*son 6

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

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

事实上,{SQL Server Native Client ...}驱动程序家族也被弃用,取而代之的是{ODBC Driver __ for SQL Server}驱动程序(__ 目前为 17、13 或 11)。然而,正如 Microsoft 惯常做的那样,它改变了主意并“弃用”了 OLE DB 访问方法(以前称为“SQLNCLI11”,现在称为“MSOLEDBSQL”)。

  • 如果您使用 Python 和 SQL Server 进行任何操作,我强烈建议升级到 ODBC 驱动程序 13 而不是 11,因为 11 有一些相当大的问题(特别是在线程方面)。例如,要让 Django 的 runserver 以 11 运行,您需要使用 `--nothreading` 运行时参数。 (2认同)