插入表中没有值

时间:2015-01-11 18:37:03

标签: sql sql-server sql-insert

我有一个包含主键的表,9个NOT NULL字段和15个ALLOW NULL字段。

如何在表格中插入一行而不必显式设置9个字段的值?

1 个答案:

答案 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