Я запускаю файл data.bat со следующими строками:
Rem Tis batch file will populate tables
cd\program files\Microsoft SQL Server\MSSQL
osql -U sa -P Password -d MyBusiness -i c:\data.sql
Содержимое файла data.sql:
insert Customers
(CustomerID, CompanyName, Phone)
Values('101','Southwinds','19126602729')
Есть еще 8 похожих строк для добавления записей.
Когда я запускаю это с start
> run
> cmd
> c:\data.bat
Я получаю сообщение об ошибке:
1>2>3>4>5>....<1 row affected>
Msg 8152, Level 16, State 4, Server SP1001, Line 1
string or binary data would be truncated.
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
<1 row affected>
Кроме того , я новичок , очевидно, но что делать Level #
, и state #
средний, и как я смотрю на сообщения об ошибках , таких как один выше: 8152?
источник
Firstname nvarchar(5)
Если вы введете более 5 символов, вы получите сообщение об ошибкеУ меня была эта проблема, хотя длина данных была меньше, чем длина поля. Оказалось, что проблема заключалась в том, что была другая таблица журналов (для контрольного журнала), заполненная триггером на главной таблице, где размер столбца также нужно было изменить.
источник
В одном из
INSERT
операторов вы пытаетесь вставить слишком длинную строку в строку (varchar
илиnvarchar
) столбца.Если неясно, кто
INSERT
является нарушителем, просто взглянув на сценарий, вы можете сосчитать<1 row affected>
строки, которые появляются перед сообщением об ошибке. Полученный номер плюс один дает вам номер выписки. В вашем случае это, кажется, вторая вставка, которая выдает ошибку.источник
Некоторые из ваших данных не могут поместиться в столбец вашей базы данных (маленький). Нелегко найти то, что не так. Если вы используете C # и Linq2Sql, вы можете перечислить поле, которое будет усечено:
Сначала создайте вспомогательный класс:
Затем подготовьте упаковщик для SubmitChanges:
Подготовьте глобальный обработчик исключений и сведения об усечении журнала:
Наконец, используйте код:
источник
Просто хочу внести дополнительную информацию: у меня была та же проблема, и это было из-за того, что поле было недостаточно большим для входящих данных, и этот поток помог мне решить эту проблему (верхний ответ разъясняет все это).
НО очень важно знать, каковы возможные причины, которые могут вызвать это.
В моем случае я создавал таблицу с таким полем:
Поэтому поле «Период» имеет длину ноль и приводит к сбою операций вставки. Я изменил его на «XXXXXX», то есть длину входящих данных, и теперь он работает правильно (потому что поле теперь имеет длину 6).
Я надеюсь, что это поможет любому с тем же вопросом :)
источник
Другая ситуация, в которой вы можете получить эту ошибку:
У меня была та же ошибка, и причина была в том, что в операторе INSERT, который получил данные из UNION, порядок столбцов отличался от исходной таблицы. Если вы измените порядок в # table3 на a, b, c, вы исправите ошибку.
источник
на сервере sql вы можете использовать SET ANSI_WARNINGS OFF следующим образом:
источник
Я была такая же проблема. Длина моей колонки была слишком короткой.
Что вы можете сделать, это либо увеличить длину, либо сократить текст, который вы хотите поместить в базу данных.
источник
Также эта проблема возникала на поверхности веб-приложения. В конце концов выяснилось, что это же сообщение об ошибке исходит из оператора обновления SQL в конкретной таблице.
Наконец, затем выяснилось, что определение столбца в соответствующих таблицах истории не отображало длину столбцов исходной таблицы
nvarchar
в некоторых конкретных случаях.источник
У меня была такая же проблема, даже после увеличения размера проблемных столбцов в таблице.
tl; dr: Длина соответствующих столбцов в соответствующих типах таблиц также может потребоваться увеличить.
В моем случае ошибка исходила от службы экспорта данных в Microsoft Dynamics CRM, которая позволяет синхронизировать данные CRM с БД SQL Server или Azure SQL DB.
После продолжительного расследования я пришел к выводу, что служба экспорта данных должна использовать табличные параметры :
Как вы можете видеть из документации выше, типы таблиц используются для создания процедуры приема данных:
К сожалению, нет никакого способа изменить тип таблицы, поэтому он должен быть удален и воссоздан полностью. Поскольку в моей таблице более 300 полей (😱), я создал запрос, чтобы облегчить создание соответствующего типа таблицы на основе определения столбцов таблицы (просто замените
[table_name]
его именем таблицы):После обновления типа таблицы служба экспорта данных снова заработала! :)
источник
Когда я попытался выполнить свою хранимую процедуру, у меня возникла та же проблема, потому что размер столбца, который мне нужно добавить для некоторых данных, короче, чем данные, которые я хочу добавить.
Вы можете увеличить размер типа данных столбца или уменьшить длину ваших данных.
источник
Другая ситуация, в которой может возникнуть эта ошибка, - в SQL Server Management Studio. Если в вашей таблице есть поля «текст» или «текст», независимо от того, какой тип поля вы обновляете (например, бит или целое число). Кажется, что Studio не загружает целые поля «ntext», а также обновляет ВСЕ поля вместо измененных. Чтобы решить эту проблему, исключите поля «текст» или «текст» из запроса в Management Studio
источник
Комментарий Кевина Поупа под принятым ответом был тем, что мне было нужно.
Проблема, в моем случае, заключалась в том, что в моей таблице были определены триггеры, которые вставляли бы транзакции обновления / вставки в таблицу аудита, но в таблице аудита было несоответствие типов данных, где столбец с
VARCHAR(MAX)
исходной таблицей хранился, какVARCHAR(1)
в таблица аудита, поэтому мои триггеры не срабатывали, когда я вставлял что-то большее, чемVARCHAR(1)
в исходный столбец таблицы, и получал это сообщение об ошибке.источник
Я использовал другую тактику, поля которой выделены 8К в некоторых местах. Здесь используется только около 50/100.
Мне нужна скорость, так как у меня всего 1 млн. Записей, и я загружаю 28K из них.
источник