在SQL中现有表中添加新的非空列进行交替表格。

65

如何在SQL Server 2005的现有表中添加非空列?

5个回答

115

你需要指定一个默认值,或者添加允许NULL的列,更新所有的值,然后将该列更改为NOT NULL。

ALTER TABLE <YourTable> 
ADD <NewColumn> <NewColumnType> NOT NULL DEFAULT <DefaultValue>

22

选择以下之一:

a)创建非空值并设置一些有效默认值
b)创建空值,填充数据,然后更改为非空


3

向表中添加 NOT NULL 列有两种方法:

  1. 通过添加带有 NULL 约束的列来 ALTER 表。填充列数据,例如:可以使用 '' 更新列。

  2. 通过给定默认值,使用带有 NOT NULL 约束的列来 ALTER 表。

    ALTER table TableName ADD NewColumn DataType NOT NULL DEFAULT ''


2
最简单的方法是:
ALTER TABLE db.TABLENAME ADD COLUMN [datatype] NOT NULL DEFAULT 'value'

示例:向表ABC添加列x(位数据类型),默认值为0

ALTER TABLE db.ABC ADD COLUMN x bit NOT NULL DEFAULT 0

PS:我不太喜欢使用表格设计器来完成这个任务,有时候传统/老派的方法更容易。希望这可以回答你的问题。


只是一个小提示,我认为正确的顺序应该是: ALTER TABLE db.ABC ADD COLUMN x bit DEFAULT 0 NOT NULL 而不是 ALTER TABLE db.ABC ADD COLUMN x bit NOT NULL DEFAULT 0 - vnkid

0
IF NOT EXISTS (SELECT 1
FROM syscolumns sc
JOIN sysobjects so
ON sc.id = so.id
WHERE so.Name = 'Table1'
AND sc.Name = 'Col1')
BEGIN
ALTER TABLE Table1
ADD Col1 INT NOT NULL DEFAULT 0;
END
GO

1
这将无法在已经存在的表上运行。 - zerkms
2
ALTER TABLE 仅允许添加可以包含 null 值的列,或者指定了默认定义的列,或正在添加的列是标识或时间戳列;或者如果前面的条件都不满足,则表必须为空才能允许添加此列。由于“Val”列不满足这些条件,因此不能将其添加到非空表“#Test”中。 - Adriaan Stander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接