【发布时间】:2019-05-06 05:58:27
【问题描述】:
我正在运行一个脚本来使用 SQLAlchamy 在 SQL Server 2017 数据库上填充一个表。该脚本在几周前完美运行。
基本上,服务器似乎没有在不可为空的字段上填充默认值。
例如,当我运行以下语句(由 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 的新手,不确定我可能缺少什么。服务器于 2018 年 11 月 15 日更新,但我在更新中没有看到任何可以解释更改的内容。
提前感谢您的帮助!
【问题讨论】:
-
DEFAULTconstraint 仅在您不为其提供值的情况下“启动”。您在INSERT语句中提供它,并且我 假设 传递值NULL,因此出现错误。 db<>fiddle -
在不相关的笔记上。空格和换行符对于使 SQL 可读性非常重要。您的
INSERT声明不容易阅读,因为它都在一行中。 -
@Larnu。谢谢!有没有理由让这在以前有效?那是我很难理解的部分。
-
它以前不应该工作。您的
INSERT语句已更改,或者您的列的 NULLability。 -
@Larnu,谢谢。我倾向于使用 Python 而不是 SQL,所以我只是粘贴原始输出。我更新了我的问题以更清楚。
标签: sql sql-server tsql sqlalchemy