【问题标题】:SqlBindParameter Invalid precision value on a nvarchar(max) columnSqlBindParameter nvarchar(max) 列上的精度值无效
【发布时间】:2021-08-05 17:29:11
【问题描述】:

我有一个表,其中有一列 ([To]) 定义为 nvarchar(max)。根据http://msdn.microsoft.com/en-gb/library/ms186939.aspxnvarchar(max) 列的最大长度为 2^32。

我正在尝试将一个 > 4000 个字符的字符串(我猜成功的阈值是 4000,但我还没有真正证明这一点)绑定到此列并且它因 HY104:1:0 而失败

SQLBindParameter:HY104:1:0:[Microsoft][SQL Server Native Client 11.0]无效的精度值

我尝试绑定的字符串的示例长度是 21707。

我尝试使用以下 ODBC 驱动程序运行,结果对所有驱动程序都是一样的:

{SQL Server}
{SQL Server Native Client 10.0}
{SQL Server Native Client 11.0}

我正在拨打的实际电话是:-

Q->ret = SQLBindParameter(Q->stmt, i, SQL_PARAM_INPUT, SQL_C_WCHAR, SQL_WVARCHAR, 
    (SQLINTEGER) (len ? len : 1), 0, data, (SQLINTEGER) len, 0);

地点:-

len = 21707
data = unicode string of length 21708 characters (43414 bytes) followed by (WORD)0

SQL 服务器详细信息:

Microsoft SQL Server Express Edition with Advanced Services (64-bit)
10.50.2550.0
Windows 7 64 bit

我做错了什么?

【问题讨论】:

  • nvarchar(max) 的最大长度为 20 亿字节 - 或 10 亿个字符(因为每个字符始终为 2 个字节)

标签: sql-server-2008 nvarchar sqlbindparameter


【解决方案1】:

答案是,我需要在绑定长字符串时使用 SQL_WLONGVARCHAR 而不是 SQL_WVARCHAR。

【讨论】:

  • 您知道阈值是 4000 还是其他值?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 2021-06-26
相关资源
最近更新 更多