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

问题描述 投票:0回答:1

这个问题更多的是关于“为什么”。当您在连接字符串中指定

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 > 驱动程序)“ODBC Driver 11 for SQL Server”(MSODBCSQL11.DLL,日期为 2014)和“SQL Server”(SQLSRV32.DLL,日期为 2010)。

在 Windows 上的 VBA 或 Python 中,通过

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

sql-server vba odbc pyodbc
1个回答
7
投票

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

不。

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

事实上,

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

© www.soinside.com 2019 - 2024. All rights reserved.