sql联机从书里的一个例了,我对它所讲的 WITH VALUES 这个关键字不明白起什么用?
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