这个问题更多的是关于“为什么”。当您在连接字符串中指定
DRIVER={SQL Server Native Client 11.0}
时,varchar(max)
列将返回空白。这个问题似乎已经持续了很多年,并且存在一些解决方法。
虽然这些问题仍然存在似乎很疯狂,但有效的解决方法是由以下人建议的:
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}
是否会丢失任何功能?如果是,它们会是什么?有更好的解决方法吗?
在 Windows 上的 VBA 或 Python 中,传递 {SQL Server} 是否会选择上述两者中较新的一个?
不。
{SQL Server}
只是 Windows 附带的(非常旧的)SQL Server 驱动程序的名称。它仍然在很多地方使用,但它不支持 SQL Server 的新功能,并且可能已经被弃用很长时间了。
事实上,
{SQL Server Native Client ...}
驱动程序 {ODBC Driver __ for SQL Server}
驱动程序(其中 __ 目前为 18、17、13 或 11)。然而,正如 Microsoft 惯常做的那样,它“改变了主意”并“弃用”了 OLE DB 访问方法(以前称为“SQLNCLI11”,现在称为“MSOLEDBSQL”)。 .