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

时间:2011-06-14 21:11:32

标签: sql sql-server sql-server-2005 tsql insert

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

这真是令人费解。我试过插入,更新和更新.write没有运气。我不能完全插入控制台和.net中我一直得到的错误是

  

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

插入语句是

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

更新

update tablename set columnname='long text' 

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

select @@textsize

给出2147483647

我在这里做错了什么想法?

4 个答案:

答案 0 :(得分:4)

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

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();

答案 1 :(得分:0)

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();
      }

}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

cmd.Parameters.Add(“@ param”,SqlDbType.NVarChar,-1).Value =参数值here;

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