在 nvarchar(max) 字段中插入超过 8000 个字符的 MSSQL

Posted

技术标签:

【中文标题】在 nvarchar(max) 字段中插入超过 8000 个字符的 MSSQL【英文标题】:insert MSSQL more than 8000 characters in a nvarchar(max) field 【发布时间】:2011-06-14 21:11:31 【问题描述】:

使用 sql 2005 时,我似乎无法在 nvarchar(max) 字段中插入超过 8000 个字符。

这真是令人费解。我尝试过插入、更新和更新 .write,但没有成功。我无法将它完全插入控制台和 .net 中,我一直得到的错误是

add 运算符中的数据类型 text 和 varchar 不兼容。

插入语句是

insert into tablename (columnname) values (' long text'); 

更新:

update tablename set columnname='long text' 

所有内容总是在 8000 个字符处被截断(文本为 11,000 个字符)。运行一些测试,我看到了

select @@textsize

提供 2147483647

有什么想法我在这里可能做错了吗?

【问题讨论】:

那么data types text 位从何而来?毕竟你有text 字段吗? 它是被截断了,还是你得到了一个错误?从您的问题文本中不清楚。 当我从控制台插入时,它会被截断。 我应该澄清一下,我尝试使用 ntext 和 nvarchar(max) 来执行此操作。但是所有这一切都只是 nvarchar(max) 该字段曾经是文本。我不知道为什么它认为它仍然是。 查看这篇文章on converting between NTEXT and NVARCHAR(MAX)我想知道你是否也有类似的问题。 【参考方案1】:

您的代码在某处截断了该值。您没有包含整个代码,因此我们无法猜测 在哪里它会被截断。通常的地方是参数声明。正确的代码应该是这样的:

SqlCommand cmd = new SqlCommand(
     @"insert into table (column) values (@param)", conn, trn);
cmd.Paramaters.Add("@param", SqlDbType.NVarChar, -1);
cmd.Parameters["@param"].Value = myLongVariable;
cmd.ExecuteNonQuery();

【讨论】:

【参考方案2】:
using (System.Data.SqlClient.SqlConnection con = new 
    SqlConnection("YourConnection string")) 
 
      con.Open(); 
      using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand())
      
           string expression = "long text................................."; 
           cmd.CommandType = CommandType.StoredProcedure; 
           cmd.CommandText = "Your Stored Procedure"; 
           cmd.Parameters.Add("Your long text Parameter Name ", 
                                SqlDbType.NVarChar).Value = expression;    
           cmd.Connection = con; 
           cmd.ExecuteNonQuery();
      


【讨论】:

【参考方案3】:

我刚刚遇到了这个问题,并最终找到了我在调用存储过程的 VBA 代码中使用的 ADO 常量。最初我是 adVarChar,它给了我“字符串数据,右截断”消息,但是当我将它换成 adLongVarChar 时,它现在可以正常工作了

【讨论】:

【参考方案4】:

cmd.Paramaters.Add("@param", SqlDbType.NVarChar, -1).Value=parametervaluehere;

其中 -1 表示 varchar/nvarchar 数据类型的最大长度。

【讨论】:

以上是关于在 nvarchar(max) 字段中插入超过 8000 个字符的 MSSQL的主要内容,如果未能解决你的问题,请参考以下文章

如何向SQL中插入含@、#等特殊字符的字符串

无法在 varbinary(max) 中插入空值并出现错误:不允许从数据类型 nvarchar 到 varbinary(max) 的隐式转换

SQL NVARCHAR 和 VARCHAR 限制

SQL NVARCHAR 和 VARCHAR 限制

不允许从数据类型 nvarchar 到 varbinary(max) 的隐式转换

nvarchar(max) 仍然被截断