找出必须在插入语句中指定哪些列

And*_*ren 6 sql-server-2008 sql-server insert default-value

有时在具有多列的表中插入数据时,如果插入语句不应该失败,知道必须指定哪些列会很有用。

我写了这个查询来找出哪些列不可为空、标识、计算、时间戳和没有默认值。

select  *
from    sys.columns
where   object_id = object_id('<table>') and
        is_nullable = 0 and
        is_identity = 0 and
        is_computed = 0 and
        default_object_id = 0 and
        type_name(system_type_id) <> 'timestamp'
Run Code Online (Sandbox Code Playgroud)

此检查中是否应包含任何其他属性?

Mar*_*ith 4

语法的 BOL 文档INSERT有这样的说法column_list

如果某列不在 中column_list,数据库引擎必须能够根据该列的定义提供一个值;否则,无法加载该行。如果列满足以下条件,数据库引擎会自动为该列提供一个值:

  • 有财产IDENTITY。使用下一个增量标识值。

  • 有默认值。使用该列的默认值。

  • timestamp数据类型。timestamp使用当前值。

  • 可以为空。使用空值。

  • 是一个计算列。使用计算值。

对我来说,您的查询似乎涵盖了所有这些情况。