简体   繁体   中英

insert MSSQL more than 8000 characters in a nvarchar(max) field

While using sql 2005, it appears I am unable to insert more than 8000 characters in a nvarchar(max) field.

This is really puzzling. I have tried insert, update and update.write with no luck. I can't insert it completely in the console and in .net the error I consistently get is

The data types text and varchar are incompatible in the add operator.

The insert statement is

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

Update:

update tablename set columnname='long text' 

Everything is always truncated at 8000 characters (the text is 11,000 characters). Running a few tests, I see that

select @@textsize

gives 2147483647

Any ideas what I might be doing wrong here?

Your code truncates the value somewhere. You did not include the entire code, so we cannot guess where it truncates. The usual place is parameter declarations. The correct code should be like this:

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

}

I've just had this issue and eventually tracked it down to the ADO constant I was using in the VBA code that calls the stored procedure. Originally I was adVarChar which gave me the "String data, right truncation" message, but when I swapped this out for adLongVarChar it now works fine

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

where -1 means max length for varchar/nvarchar datatype.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM