假设我有一个名为SerialNumbers
的表,该表具有以下列:
(int)
(nvarchar)
(bit)
(DateTime)
当前,该表正在被许多不同的应用程序使用。现在,我们需要添加一个名为CurrentlyAt (int)
的新列,该列将始终具有默认值1
。我继续并添加了默认值为1
的列。
所以我的问题是,我现在是否必须更改所有以前的insert
查询以包括新列,或者如果我不将其添加到旧的{{1} }语句?
答案 0 :(得分:2)
答案当然取决于它。
只要您现有的INSERT
语句具有明确的列列表,就无需对其进行编辑,并且默认情况下将插入默认值。
INSERT INTO SerialNumbers (
Id,
SerialNumber,
IsValid,
ToBeUsedBy)
SELECT....
但是,如果您有没有的任何插入都具有列列表,则它们将引发错误:
INSERT INTO SerialNumbers
SELECT....
因为SELECT
或VALUES
子句中的列数可能不再与INSERT
目标表中的列数匹配。
出于这个原因,解决方案是添加显式列列表,然后养成始终使用所述列表的习惯。
编辑:肖恩·兰格(Sean Lange)认为,我假设新列为NOT NULL
。如果可以为空,那么是的,会有更多可能的结果,这些结果可能会产生与预期不同的结果。