вставить MSSQL более 8000 символов в поле nvarchar (max) - PullRequest
1 голос
/ 15 июня 2011

При использовании sql 2005 кажется, что я не могу вставить более 8000 символов в поле nvarchar (max).

Это действительно озадачивает.Я попытался вставить, обновить и обновить .write без удачи.Я не могу полностью вставить его в консоль, и в .net постоянно появляется ошибка

Типы данных text и varchar несовместимы в операторе добавления.* Оператор вставки:

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

Обновление:

update tablename set columnname='long text' 

Все всегда усекается до 8000 символов (текст - 11000 символов).Пройдя несколько тестов, я вижу, что

select @@textsize

дает 2147483647

Есть идеи, что я могу делать не так здесь?

Ответы [ 4 ]

4 голосов
/ 15 июня 2011

Ваш код где-то усекает значение. Вы не включили весь код, поэтому мы не можем угадать , где он усекается. Обычное место - объявления параметров. Правильный код должен быть таким:

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();
0 голосов
/ 06 июля 2011

cmd.Paramaters.Add ("@ param", SqlDbType.NVarChar, -1) .Value = значение параметра здесь;

где -1 означает максимальную длину для типа данных varchar / nvarchar.

0 голосов
/ 06 июля 2011

Я только что столкнулся с этой проблемой и в итоге отследил ее до константы ADO, которую я использовал в коде VBA, который вызывает хранимую процедуру. Первоначально я был adVarChar, который дал мне сообщение «String data, right truncation», но когда я поменял его на adLongVarChar, теперь оно отлично работает

0 голосов
/ 15 июня 2011
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();
      }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...