SQL Server неожиданно не соблюдает значения по умолчанию - PullRequest
0 голосов
/ 04 декабря 2018

Я запускаю сценарий для заполнения таблицы в базе данных SQL Server 2017 с использованием SQLAlchamy.Сценарий выполнялся безупречно несколько недель назад.

По сути, сервер, по-видимому, не заполняет значения по умолчанию в полях, не допускающих значения NULL.

Например, когда я запускаю следующую инструкцию (отрисованную SQLA):

 INSERT INTO concept
        (
                    retired,
                    short_name,
                    description,
                    form_text,
                    datatype_id,
                    class_id,
                    is_set,
                    creator,
                    date_created,
                    version,
                    changed_by,
                    date_changed,
                    retired_by,
                    date_retired,
                    retire_reason,
                    uuid,
                    note_regex
        )
        VALUES
        (
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?,
                    ?
        )'] [parameters: (0,
                    'ck',
                    'creatine phosphokinase',
                    None,
                    14,
                    49,
                    0,
                    0,
                    None,
                    None,
                    None,
                    None,
                    None,
                    None,
                    None,
                    'cf6443ff-f2a1-49ab-96e3-c5d6fac362ed', None)] 

Я получаю сообщение об ошибке:

Cannot insert the value NULL into column 'date_created',
table 'myositis_longetudinal_cohort.dbo.concept'; column does not allow
nulls. INSERT fails. (515)

Это сбивает с толку меняпоскольку поле date_created имеет значение по умолчанию getdate()

Вот оператор ограничения:

ALTER TABLE [dbo].[concept]
ADD CONSTRAINT [DF__concept__date_cr__62AFA012] DEFAULT (Getdate()) FOR
[date_created]  

Я новичок в SQL Server и не уверен, чего мне не хватает.Сервер был обновлен 15.11.18, но я не увидел в обновлении ничего, что могло бы объяснить изменение.

Заранее спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Спасибо всем.

Оказывается, это была проблема SQLAlchemy.

Мне пришлось добавить autoload: true к моему __table_args__ вместо того, чтобы вручную определять каждый столбец.Очевидно, что если вы не разрешите SQLA анализировать таблицу, она будет передавать значение NULL в качестве значения, а не пропускать значение при генерации оператора вставки, как предложено @larnu и другими.

0 голосов
/ 04 декабря 2018
    INSERT INTO concept
    (
                retired,
                short_name,
                description,
                form_text,
                datatype_id,
                class_id,
                is_set,
                creator,
                date_created,  <--SPECIFYING HERE MEANS DEFAULT WON'T BE USED
                version,
                changed_by,
                date_changed,
                retired_by,
                date_retired,
                retire_reason,
                uuid,
                note_regex
    )

И параметры:

[parameters: (
 0,                         <-- retired,  
 'ck',                      <-- short_name,     
 'creatine phosphokinase',  <-- description,                         
 None,                      <-- form_text,     
 14,                        <-- datatype_id,   
 49,                        <-- class_id,   
 0,                         <-- is_set,  
 0,                         <-- creator,  
 None,                      <-- date_created   (provided with NULL)  
 None,
 None,
 None,
 None,
 None,
 None,
 'cf6443ff-f2a1-49ab-96e3-c5d6fac362ed', 
 None
 )] 

Та же проблема будет возникать для любых других столбцов в вашей таблице, которые имеют NON_NULL_DEFAULT + NOTNULL_CONSTRAINT

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

  • SQLAlchemy никогда не использовался для генерации вставки, которая указала этот столбец
  • Добавлено ограничение NOT NULL
  • Триггер, предоставляющий значения в случае нулевого значенияпередаваемый был удален, перекодирован или отключен
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...