【发布时间】:2011-10-09 04:45:05
【问题描述】:
您好,我的表中有一个位类型的列,我将为许多数据库运行一个脚本,检查它是否存在,如果它确实存在,我需要更改它并添加一个列并默认它的位值默认为 1
我尝试了以下方法,但是当它创建列时它仍然显示 NULL 我缺少什么?
ALTER TABLE [myTable] ADD [ShippingOption] [bit] NULL DEFAULT 1
谢谢
【问题讨论】:
标签: sql sql-server-2008
您好,我的表中有一个位类型的列,我将为许多数据库运行一个脚本,检查它是否存在,如果它确实存在,我需要更改它并添加一个列并默认它的位值默认为 1
我尝试了以下方法,但是当它创建列时它仍然显示 NULL 我缺少什么?
ALTER TABLE [myTable] ADD [ShippingOption] [bit] NULL DEFAULT 1
谢谢
【问题讨论】:
标签: sql sql-server-2008
只需使用WITH VALUES 让新列采用default 值而不是NULL
ALTER TABLE [myTable]
ADD [ShippingOption] [bit] NULL DEFAULT 1 WITH VALUES;
如果您新添加的列标记为NOT NULL,则不需要这样做。在这种情况下,将自动应用默认值。
【讨论】:
当默认约束应用于可空列时,例如在这种情况下,默认值仅应用于从列表中排除列名时的插入。
通常,这在您创建字段时不适用。 编辑:不过,正如Martin所指出的,通过添加WITH VALUES是可以得到想要的效果的。
【讨论】:
听起来您已经使用默认值创建了列。如果未指定,所有未来的插入都将使用此默认值。
你说“它仍然显示NULL”。您需要更新现有记录:
UPDATE myTable
SET ShippingOption = 1
WHERE ShippingOption IS NULL;
您的默认值不适用的原因:您的列仍然可以为空。所以在创建时,不需要应用默认值。
您也可以在ALTER 语句中指定该列为NOT NULL。这将确保应用您的默认值而不需要您发出UPDATE,并确保任何语句在插入时都需要非空值:
ALTER TABLE [MyTable] ADD [ShippingOption] [bit] NOT NULL DEFAULT 1;
【讨论】: