如何将具有默认值的列添加到SQL Server 2000/SQL Server 2005中的现有表中?
当前回答
有两种不同的方法来解决这个问题。两者都添加了一个默认值,但在这里为问题语句添加了完全不同的含义。
让我们从创建一些示例数据开始。
创建示例数据
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 {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES
例子:
ALTER TABLE SomeTable
ADD SomeCol Bit NULL --Or NOT NULL.
CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.
笔记:
可选约束名称:如果忽略CONSTRAINT D_SomeTable_SomeCol,则SQL Server将自动生成具有有趣名称的默认对照,如:DF__SomeTa__SomeC_4FB7FEF6
可选值声明:只有当列为空时,才需要WITH VALUES并且您希望将默认值用于现有记录。如果您的列不是NULL,那么它将自动使用默认值对于所有现有记录,无论是否指定WITH VALUES。
插入件如何使用默认约束:如果在SomeTable中插入一条记录,但未指定SomeCol的值,则它将默认为0。如果插入Record并将SomeCol的值指定为NULL(并且您的列允许为空),则将不使用默认约束,并且将插入NULL作为值。
笔记基于下面每个人的反馈。特别感谢:@Yatrix、@WalterStabosz、@YahooSerious和@StackMan的评论。
这适用于SQL Server:
ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES
例子:
ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES
如果要添加约束,请执行以下操作:
ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES
向表中添加新列:
ALTER TABLE [table]
ADD Column1 Datatype
例如
ALTER TABLE [test]
ADD ID Int
如果用户希望使其自动递增,则:
ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
好吧,我现在对我之前的回答做了一些修改。我注意到,没有一个答案提到“如果不存在”。因此,我将提供一个新的解决方案,因为我在改变表格时遇到了一些问题。
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient')
BEGIN
ALTER TABLE dbo.TaskSheet ADD
IsBilledToClient bit NOT NULL DEFAULT ((1))
END
GO
这里TaskSheet是特定的表名,IsBilledToClient是要插入的新列,1是默认值。这意味着在新列中现有行的值是多少,因此将在那里自动设置一个值。然而,您可以像我使用BIT一样,根据自己的意愿更改列类型,所以我输入了默认值1。
我建议采用上述系统,因为我遇到了一个问题。那么问题出在哪里呢?问题是,如果表表中确实存在IsBilledToClient列,那么如果只执行下面给出的部分代码,则SQL server查询生成器中将出现错误。但如果它不存在,那么第一次执行时将不会出现错误。
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]
ALTER表数据集表名添加列_当前_查找整数默认值0
推荐文章
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- 查询JSON类型内的数组元素
- 确定记录是否存在的最快方法
- 获得PostgreSQL数据库中当前连接数的正确查询
- 在SQL选择语句Order By 1的目的是什么?
- 从现有模式生成表关系图(SQL Server)
- 我如何循环通过一组记录在SQL Server?
- 数据库和模式的区别
- 如何在SQL Server中一次更改多个列
- 如何从命令行通过mysql运行一个查询?
- 外键约束可能导致循环或多条级联路径?
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何选择每一行的列值不是独特的