我有一个包含主键的表,9个NOT NULL字段和15个ALLOW NULL字段。
如何在表格中插入一行而不必显式设置9个字段的值?
答案 0 :(得分:1)
假设您为这9个NOT NULL
字段创建了默认值,则有三个选项:
请勿使用DEFAULT VALUES
设置任何字段的值。
不要通过在INSERT列列表或VALUES列表中指定这些字段来设置NOT NULL
字段的值。
不要设置NOT NULL
字段的值,假设它们在INSERT列列表中 ,使用DEFAULT
关键字而不是值
显示每个选项的示例以及将NULL
显式插入具有默认值的NULLable字段的效果:
DECLARE @Test TABLE
(
ID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
NotNullField DATETIME NOT NULL DEFAULT (GETDATE()),
NullableFieldWithDefault DATETIME NULL DEFAULT (GETDATE()),
NullableFieldWithNoDefault DATETIME NULL
);
-- No values specified for any fields
INSERT INTO @Test DEFAULT VALUES;
-- Values specified only for NULLable field with no default
INSERT INTO @Test (NullableFieldWithNoDefault) VALUES ('2112-12-21');
-- DEFAULT keyword used for fields with a default
INSERT INTO @Test (NotNullField, NullableFieldWithDefault, NullableFieldWithNoDefault)
VALUES (DEFAULT, DEFAULT, '1999-03-15');
-- NULLs specified for NULLable fields
INSERT INTO @Test (NullableFieldWithDefault, NullableFieldWithNoDefault)
VALUES (NULL, NULL);
SELECT * FROM @Test;
结果:
ID NotNullField NullableFieldWithDefault NullableFieldWithNoDefault
-- ----------------------- ------------------------ --------------------------
1 2015-01-11 16:22:31.317 2015-01-11 16:22:31.317 NULL
2 2015-01-11 16:22:31.320 2015-01-11 16:22:31.320 2112-12-21 00:00:00.000
3 2015-01-11 16:22:31.320 2015-01-11 16:22:31.320 1999-03-15 00:00:00.000
4 2015-01-11 16:22:31.320 NULL NULL