Sql-Server
找出必須在插入語句中指定哪些列
有時,在包含許多列的表中插入數據時,如果插入語句不應該失敗,了解必須指定哪些列可能會很有用。
我編寫了這個查詢來找出哪些列不可為空、標識、計算、時間戳並且沒有預設值。
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
值。- 可以為空。使用空值。
- 是一個計算列。使用計算值。
對我來說,您的查詢似乎涵蓋了所有這些情況。