在 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的主要内容,如果未能解决你的问题,请参考以下文章
无法在 varbinary(max) 中插入空值并出现错误:不允许从数据类型 nvarchar 到 varbinary(max) 的隐式转换