1с не удалось вставить значение null в столбец ошибка в insert

Обновлено: 07.07.2024

однако, я не указываю первичный ключ (который id ). Так что мои вопросы, почему sql server возвращается с этой ошибкой:

  • Откройте ваш стол в Design
  • выберите свой столбец и перейдите в Column Properties
  • под Indentity Specification , set (Is Identity)=Yes и Indentity Increment=1

Если id столбец не имеет значения по умолчанию, но имеет NOT NULL ограничение, то вы должны предоставить значение сами

использовать IDENTITY(1,1) при создании таблицы например,

вам нужно либо указать идентификатор во вставке, либо настроить столбец id в базе данных, чтобы иметь спецификацию Identity = Yes.

поскольку id-это PK, он должен быть уникальным, а не нулевым. Если вы не укажете какое-либо поле в списке полей для вставки, оно будет иметь значение null или значение по умолчанию. Установите идентификатор (т. е. автоинкремент) для этого поля, если вы не хотите устанавливать его вручную каждый раз.

вам нужно установить свойство autoincrement столбца id в true при создании таблицы или вы можете изменить существующую таблицу, чтобы сделать это.

@curt правильно, но я заметил, что иногда даже это не удается с нулевыми запрещенными ошибками, и это, кажется, прерывисто. Я всегда избегал ошибки, также устанавливая семя Indenty в 1 и IDENTITY(1, 1) NOT FOR REPLICATION .

вы не дали значение для ID. Попробуйте это :

или вы можете установить автоматическое увеличение на поле id, если вам нужно значение id добавляется автоматически.

Если вы не можете или не хотите устанавливать свойство autoincrement идентификатора, вы можете установить значение для идентификатора для каждой строки, например:

в моем случае,

Я пытался обновить свою модель, сделав внешний ключ обязательным, но в базе данных уже были "нулевые" данные в некоторых столбцах из ранее введенных данных. Поэтому каждый раз, когда я запускаю update-database. я получил ошибку.

Я решил это, вручную удалив из базы данных все строки, которые имели null в столбце, который я делал обязательным.

вы можете вставить значение вручную в столбец ID (здесь я называю его "PK"):

Описание ошибки:
Столкнулся с ошибкой при выполнении процедуры Тестирование и исправление. на этапе реструктуризации таблиц информационной базы. База клиент-серверная. 1С: Управление торговлей 10.3.31. Платформа 1С: Предприятие 8.3.9

Сложно сказать, что посчастливилось, но все же ошибка преследовала меня в базе не единожды. Но по своей сути каждая последующая формулировка "В процессе обновления информационной базы произошла критическая ошибка. " отличалсь в причине и решении незначительно. С такой ошибкой столкнулся, если быть откровенным, впервые, но интернет в принятии решения устранения ошибки сильно не помог, кроме вот этого обсуждения на форуме Как удалить строки содержащие NULL в таблице где NULL недопустимо. Зацепок решения не было. Но все же решение было найдено. Читаем. ниже.

1С 8 ошибки в конфигураторе тестирование и исправление базы данных, В процессе обновления информационной базы произошла критическая ошибка

Итак, начнем с первого факта возникновения ошибки при выполнении тестирования и исправления базы данных на этапе реструктуризации таблиц базы данных.

1С 8 критическая ошибка по причине: Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец , таблицы ".dbo."; в столбце запрещены значения NULL. Ошибка в INSERT.

Полный текст ошибки:
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец "_Fld412", таблицы "Торговля.dbo._Reference19NG"; в столбце запрещены значения NULL. Ошибка в INSERT.
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1

Если взглянуть скрином ранее, то нельзя упустить из виду подсказку, оставленую программой в левом нижнем углу окна программы, в строке состояния, о том, что выполнение реструктуризации прервалось на справочнике "Банковские счета". В базе справочник имел более 3х с половиной тысяч элементов, поэтому сходу было сложно понять, в каком из них скрывается ошибка. Была написана простая обработка, которая просто должны была обойти все элементы справочника и перезаписать их. Надежда была на то, что запись проблемного элемента завершиться ошибкой.

Исполняемый код обработки прост:

Запрос = Новый Запрос ;
Запрос . Текст = "ВЫБРАТЬ
| БанковскиеСчета.Ссылка
|ИЗ
| Справочник.БанковскиеСчета КАК БанковскиеСчета" ;
Выборка = Запрос . Выполнить (). Выбрать ();
Пока Выборка . Следующий () Цикл
СпрОбъект = Выборка . Ссылка . ПолучитьОбъект ();
СпрОбъект . Записать ();
КонецЦикла;

Предположение было оправдано. Ошибка при записи возникла. Теперь было понятно, элемент с каким кодом может быть причиной критической ошибки в процессе обновления информационной базы.

Это оказался элемент справочника, у которого не был заполнен ни одни реквизит, так что мне даже не удавалось пометить такой элемент на удаление. Дальше была написана простая обработка для удаления выбранного элемента справочника без проверки ссылочной целостности. Элемент был удален.

Тестирование и исправление было запущено повторно. Но уже вскоре после запуска процедуры в режиме реструктуризация таблиц базы мен ожидала идентичная ошибка, но уже связанная со справочником "Организации".

Новый текст ошибки отличался лишь немногим, названием таблицы и именем столбца:
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец "_Fld888", таблицы "Торговля.dbo._Reference66NG"; в столбце запрещены значения NULL. Ошибка в INSERT.
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1

По опыту предыдущей инцидента уже казалось понятным, что в справочнике у какого-то элемента не заполнены данные. Так и оказалось. Проблемный элемент справочника был найден мгновенно и в этом случае повезло больше элемент можно было пометить на удаление, был помечен и удален с помощью "Удаление помеченных объектов".

1С предприятие 8 ошибка при тестировании базы как устранить HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1

Тестирование и исправление было запущено в третий раз. Но и этот раз не обошелся без "критической ошибки в процессе обновления информационной базы".

Текст третьей ошибки:
В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец "_Fld1024RRef", таблицы "Торговля.dbo._Reference88NG"; в столбце запрещены значения NULL. Ошибка в INSERT.
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1

1С 8 конфигуратор ошибка при тестировании и исправлении, реструктуризация таблиц информационной базы, В процессе обновления информационной базы произошла критическая ошибка по причине: Ошибка СУБД:

Но и в этот раз программа оставила подсказку, что проблема содержится в записях справочника "ТипыЦенНоменклатурыКонтрагентов".

Удалить проблемные элементы справочника пришлось программно с помощью все той же, указанной выше простой обработки непосредственного удаления без проверки ссылочной целостности.

1С 8 ошибка конфигуратора Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец таблицы dbo, в столбце запрещены значения NULL. Ошибка в INSERT. HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1

И в итоге очередной запуск, уже четвертый по счету, в режиме "Реструктуризация таблиц информационной базы" в рамках тестирования и исправления завершился успешно.

Случилось как-то, что в одной базе при выполнении "Тестирования и исправления. " в режиме "Реструктуризация таблиц базы данных" столкнуться мне с ошибкой со страшной формулировкой:

В процессе обновления информационной базы произошла критическая ошибка
по причине:
Ошибка СУБД:
Microsoft SQL Server Native Client 11.0: Не удалось вставить значение NULL в столбец "_Fld888", таблицы "Торговля.dbo._Reference66NG"; в столбце запрещены значения NULL. Ошибка в INSERT.
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=2, Severity=10, native=515, line=1


Но собственно публикация не о самой ошибке (описание борьбы с ошибкой можно изучить по ссылке) а о том, как предложенная узкая по назначению обработка помогла в очистке базы уж от очень неудачных элементов справочников. Вот скрины их примеров.


Штатным способом пометить на удаление элементы с кодом типа "F0000000N" не представлялось возможным.

универсальная обработка для 1С 8 удаление без проверки ссылок для справочника документа

Если кто-то сталкивался с такой ситуацией, то значет, что платформа в подобнос случае не позволит открыть элемент для дальнейшего заполнения, чтобы потом уже можно было пометить на удаление.

1С 8 как удалить объект базы без проверки ссылочной целостности

Но факт состоял в том, что было точно известно, что эти элементы лишние и ничего от них не зависит. А следовательно их можно удалить. Тем более если их не удалить, то "критическая ошибка" не была бы устранена.

Тестировалась в 1С: Бухгалтерия предприятия, ред. 2.0, релиз 2.0.66.39; ред. 3.0, релиз 3.0.64.28. Подойдет к любым конфигурациям.

однако я не указываю первичный ключ (который является id ). Поэтому мои вопросы: почему sql server возвращается с этой ошибкой:

Я предполагаю, что id должно быть увеличивающимся значением.

вам нужно установить это, или иначе, если у вас есть столбец без nullable, без значения по умолчанию, если вы не укажете значение, это приведет к ошибке.

настройка автоматического приращения в среде SQL Server Management Studio:

  • откройте свой стол в Design
  • выберите столбец и перейти к Column Properties
  • под Indentity Specification , set (Is Identity)=Yes и Indentity Increment=1

Если id столбец не имеет значения по умолчанию, но имеет NOT NULL ограничение, тогда вы должны сами предоставить значение

использовать IDENTITY(1,1) при создании таблицы например!--3-->

вам нужно либо указать ID во вставке, либо настроить столбец id в базе данных, чтобы иметь спецификацию >

поскольку id-PK, он должен быть уникальным, а не нулевым. Если вы не укажете какое-либо поле в списке полей для вставки, оно будет иметь значение null или значение по умолчанию. Установите identity (т. е. autoincrement) для этого поля, если вы не хотите устанавливать его вручную каждый раз.

вам нужно установить свойство autoincrement столбца id в true при создании таблицы или вы можете изменить существующую таблицу для этого.

@curt правильно, но я заметил, что иногда даже это терпит неудачу с нулевыми запрещенными ошибками, и это кажется прерывистым. Я избежал ошибки во все времена, установив Indenty семян 1 и IDENTITY(1, 1) NOT FOR REPLICATION .

вы не дали значение для ID. Попробуйте это :

или вы можете установить автоматическое приращение в поле id, если вам нужно автоматически добавить значение id.

Если вы не можете или не хотите установить свойство autoincrement id, вы можете установить значение для id для каждой строки, например:

Я пытался обновить свою модель, сделав внешний ключ обязательным, но в базе данных уже были "нулевые" данные в некоторых столбцах из ранее введенных данных. Поэтому каждый раз, когда я запускаю update-database. я понял ошибку.

Я решил это, вручную удалив из базы данных все строки, которые имели null в столбце, который я делал обязательным.

вы можете вставить значение вручную в столбец ID (здесь я называю его "PK"):

Читайте также: