F. 添加具有默认值的可为空的列
下例添加可为空的、具有 DEFAULT 定义的列,并使用 WITH VALUES 为表中的各现有行提供值。如果没有使用 WITH VALUES,那么每一行的新列中都将具有 NULL 值。
ALTER TABLE MyTable
ADD AddDate smalldatetime NULL
CONSTRAINT AddDateDflt
DEFAULT getdate() WITH VALUES
有没有这个WITH VALUES 都不起用啊?
例:
CREATE TABLE tbl_test
(
t_id INT,
t_name CHAR(10)
)
GO
ALTER TABLE tbl_test
ADD t_address NULL
CONSTRAINT DF_t_address
DEFAULT( 'UNKONWN ') WITH VALUES
GO
我的理解:
INSERT INTO tbl_test VALUES(1, 'mike ',NULL)
因为用了 WITH VALUES 所以当我在t_address 这个列上插入NULL后,由于t_address有WITH VALUES 这个关键字,虽然我插入的是NULL,但是它会变成 'UNKNOWN '这个默认值,但是结果不是这样!!!它还是得到NULL??
WITH VALUES,我该怎么理解??
------解决方案--------------------
如下情况:
1、你建立的一个表;
2、然后你发现表少了一个字段;
3、于是你想给它加字段,并且想给这个字段加个默认值;
于是
alter table tbname add col2 int default 0 with values
就是在添加这个列的同时给这个字段赋默认值 0
以后新增的行如果没有显示的插入这个字段的值,则赋予默认值0,若有显示赋值,则不取默认值。
------解决方案--------------------
with values 是针对旧记录的
楼上的说法应该稍改一下:
-- 1. 建立表
create table tb(id int)
-- 2. 插入记录
insert tb values(1)
-- 3. 发现少了字段, 准备添加一个, 并且默认值为 0, 并且以前的记录该列也要有默认值
ALTER TABLE tb ADD col1 int DEFAULT(0) WITH VALUES
-- 4. 发现少了字段, 准备添加, 默认值为0
ALTER TABLE tb ADD col2 int DEFAULT(0)
-- 5. 显示结果
SELECT * FROM tb