【问题标题】:SQL Server pyodbc large text insertion issueSQL Server pyodbc 大文本插入问题
【发布时间】:2019-04-22 07:22:29
【问题描述】:

我有一个大字符串文本要插入到 SQL Server 2014 Express (v12.0.2000) 的列中。最初我将该字段定义为text 类型,并且数据被插入到表中而没有任何问题。后来我发现text 数据类型已被弃用,不应该使用。将数据类型转换为 varchar(max) 在 pyodbc 中引发了一个奇怪的问题。当将相同的数据插入varchar(max) 列时,它会引发错误并显示以下消息:

[HY000] [Microsoft][ODBC SQL Server Driver]警告:部分插入/更新。文本或图像列的插入/更新未成功。 (0) (SQLPutData)

但是对于text 列,同样的插入效果很好。

我正在使用{SQL Server} 驱动程序和Windows 身份验证,当我将其更改为{SQL Server Native Client 11.0} 时,它开始在身份验证中失败,所以我将其切换回{SQL Server},因为它正在使用text 数据类型。

我查看了一些关于类似问题的讨论,但找不到有助于调试问题的案例。

我检查了数据插入成功和失败的字符串的大小:

  • TEXT:所有数据插入成功。
  • VARCHAR(MAX): 插入长度为 98566 但长度为 326235 的字符串失败。

任何指导甚至调试技巧都将受到高度赞赏。提前致谢。

【问题讨论】:

  • 这些类型的使用没有区别。本机客户端也没有身份验证问题。十年前,数百万人会注意到。发布您的代码和实际的完整错误
  • 自 2002 年 .NET 1.0 发布以来,Windows 上的每个 开发人员都会注意到身份验证问题。从 textvarchar(max) 的迁移是在 2005 年。随机切换驱动程序只能引入错误,不能修复它们
  • 我假设您使用的语言是 Python。你用的是什么?您是否检查过任何处理该库的 BLOB/CLOB 数据的示例?
  • 对不起@PanagiotisKanavos,我把它搞砸了,正如你所料。对于 pyodbc 和本机驱动程序 11.0,我们需要明确提及 Windows 身份验证的可信连接,而早期的情况并非如此。此外,pyodbc 采用 Trusted_Connection='yes' 而不是 Trusted_Connection=true。这就是我遇到身份验证问题的原因。反正已经解决了。
  • 然而,我提到的关于 {SQL Server} 和 varchar(max) 数据类型的问题仍然存在,即使我现在得到了工作替代品。如果您想调查,我是否应该发布有关该问题的更多信息?我正在使用 pyodbc 库进行数据库连接。 @PanagiotisKanavos 感谢您的快速响应 bdw。 :)

标签: python sql-server pyodbc


【解决方案1】:

“警告:部分插入/更新”。错误与

有关
  • 古老的DRIVER=SQL ServerODBC驱动(SQLSRV32.DLL),
  • [n]varchar(max) 列和
  • 字符串长度超过 204800 个字符。

DRIVER=ODBC Driver 11 for SQL ServerDRIVER=ODBC Driver 17 for SQL Server 等较新的驱动程序不会出现这种情况。

如果身份验证错误仍然存​​在并且您需要帮助,您应该更新您的驱动程序,然后 ask a new question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多