如何将具有默认值的列添加到SQL Server 2000/SQL Server 2005中的现有表中?


当前回答

这可以通过以下代码完成。

CREATE TABLE TestTable
    (FirstCol INT NOT NULL)
    GO
    ------------------------------
    -- Option 1
    ------------------------------
    -- Adding New Column
    ALTER TABLE TestTable
    ADD SecondCol INT
    GO
    -- Updating it with Default
    UPDATE TestTable
    SET SecondCol = 0
    GO
    -- Alter
    ALTER TABLE TestTable
    ALTER COLUMN SecondCol INT NOT NULL
    GO

其他回答

当要添加的列具有NOT NULL约束,但没有DEFAULT约束(值)时,请注意。在这种情况下,如果表中有任何行,ALTER TABLE语句将失败。解决方案是从新列中删除NOT NULL约束,或为其提供DEFAULT约束。

右键单击表名,然后单击“设计”,在最后一个列名下单击,然后输入“列名”、“数据类型”和“允许空值”。

然后在页面底部设置一个默认值或绑定:类似于“1”表示字符串或1表示int。

有两种不同的方法来解决这个问题。两者都添加了一个默认值,但在这里为问题语句添加了完全不同的含义。

让我们从创建一些示例数据开始。

创建示例数据

CREATE TABLE ExistingTable (ID INT)
GO
INSERT INTO ExistingTable (ID)
VALUES (1), (2), (3)
GO
SELECT *
FROM ExistingTable

1.为以后的插入添加具有默认值的列

ALTER TABLE ExistingTable
ADD ColWithDefault VARCHAR(10) DEFAULT 'Hi'
GO

因此,现在我们在插入新记录时添加了一个默认列,如果没有提供值,它将默认值为“Hi”

INSERT INTO ExistingTable(ID)
VALUES (4)
GO
Select * from ExistingTable
GO

这解决了我们的问题,即默认值,但这里有一个解决问题的方法。如果我们希望在所有列中都有默认值,而不仅仅是将来的插入,该怎么办???为此,我们有方法2。

2.为所有插入添加具有默认值的列

ALTER TABLE ExistingTable
ADD DefaultColWithVal VARCHAR(10) DEFAULT 'DefaultAll'
WITH VALUES
GO
Select * from ExistingTable
GO

以下脚本将在每个可能的场景中添加一个具有默认值的新列。

希望这能为提出的问题增加价值。谢谢

ALTER TABLE ADD ColumnName {Column_Type} Constraint

MSDN文章ALTERTABLE(Transact-SQL)具有所有altertable语法。

步骤1.首先,您必须使用添加字段来更改表

alter table table_name add field field_name data_type

步骤2创建默认值

USE data_base_name;
GO
CREATE DEFAULT default_name AS 'default_value';

步骤3然后您必须执行此过程

exec sp_bindefault 'default_name' , 'schema_name.table_name.field_name'

示例-

USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';