Sql-Server

找出必須在插入語句中指定哪些列

  • February 12, 2012

有時,在包含許多列的表中插入數據時,如果插入語句不應該失敗,了解必須指定哪些列可能會很有用。

我編寫了這個查詢來找出哪些列不可為空、標識、計算、時間戳並且沒有預設值。

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'

是否有任何其他屬性應包含在此檢查中?

語法的 BOL 文件INSERT有這樣的說法column_list

如果某列不在 中column_list,則數據庫引擎必須能夠根據該列的定義提供一個值;否則,無法載入該行。如果列出現以下情況,數據庫引擎會自動為該列提供一個值:

  • 有財產IDENTITY。使用下一個增量標識值。
  • 有預設值。使用該列的預設值。
  • timestamp數據類型。使用目前timestamp值。
  • 可以為空。使用空值。
  • 是一個計算列。使用計算值。

對我來說,您的查詢似乎涵蓋了所有這些情況。

引用自:https://dba.stackexchange.com/questions/12520