【问题标题】:What are the differences in using driver {SQL SERVER} vs Native Client使用驱动程序 {SQL SERVER} 与 Native Client 有什么区别
【发布时间】:2017-01-31 16:29:20
【问题描述】:

这个问题更多的是关于“为什么”。当您在连接字符串中指定 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 > Drivers)“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} 会丢失任何功能吗?如果是,它们会是什么?有更好的解决方法吗?

【问题讨论】:

  • 您是否尝试过使用DRIVER={ODBC Driver 11 for SQL Server}?您似乎在说它已安装,并且它会比 SQL Server Native Client 11.0(SQLNCLI11.DLL,大约 2012 年)更新。
  • 另外,验证pyodbc.version 返回“4.0.3”。最近对 pyodbc 进行了一些可能解决该问题的更改。
  • 谢谢,我试过 DRIVER={ODBC Driver 11 for SQL Server},它也可以工作;而且我认为更新是有道理的,因为它会考虑到最新的功能,所以我不应该完全担心有什么区别。仍然很好奇,但我可能应该放手哈哈

标签: sql-server vba odbc pyodbc


【解决方案1】:

在 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”)。

【讨论】:

  • 我确认 (max) 列上的数据使用 SQL Server 的 ODBC 驱动程序 11 返回,它比我尝试的 Native Client 和 SQL Server 驱动程序更新,因此使用它最有意义,谢谢!
  • 如果您使用 Python 和 SQL Server 做任何事情,我强烈建议您升级到 ODBC Driver 13 而不是 11,因为 11 有一些相当大的问题(尤其是在线程方面)。例如,要让 Django 的 runserver 以 11 运行,您需要使用 --nothreading 运行时参数。
  • 请注意,OLE DB 驱动程序正在卷土重来:blogs.msdn.microsoft.com/sqlnativeclient/2017/10/06/…
  • @Will - 感谢您的提示。我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多