使用默认值将新列添加到现有表

时间:2019-05-02 13:55:05

标签: sql sql-server database-design

假设我有一个名为SerialNumbers的表,该表具有以下列:

  • Id (int)
  • SerialNumber (nvarchar)
  • IsValid (bit)
  • ToBeUsedBy (DateTime)

当前,该表正在被许多不同的应用程序使用。现在,我们需要添加一个名为CurrentlyAt (int)的新列,该列将始终具有默认值1。我继续并添加了默认值为1的列。

所以我的问题是,我现在是否必须更改所有以前的insert查询以包括新列,或者如果我不将其添加到旧的{{1} }语句?

1 个答案:

答案 0 :(得分:2)

答案当然取决于它。

只要您现有的INSERT语句具有明确的列列表,就无需对其进行编辑,并且默认情况下将插入默认值。

INSERT INTO SerialNumbers (
  Id,
  SerialNumber,
  IsValid,
  ToBeUsedBy)
SELECT....

但是,如果您有没有的任何插入都具有列列表,则它们将引发错误:

INSERT INTO SerialNumbers 
SELECT....

因为SELECTVALUES子句中的列数可能不再与INSERT目标表中的列数匹配。

出于这个原因,解决方案是添加显式列列表,然后养成始终使用所述列表的习惯。

编辑:肖恩·兰格(Sean Lange)认为,我假设新列为NOT NULL。如果可以为空,那么是的,会有更多可能的结果,这些结果可能会产生与预期不同的结果。