在本教程中,将学习如何使用SQL Server ALTER TABLE ALTER COLUMN
语句来修改表的列。
SQL Server可对表的列执行以下更改:
- 修改数据类型
- 改变大小
- 添加
NOT NULL
约束
1. 修改列的数据类型
要修改列的数据类型,请使用以下语句:
ALTER TABLE table_name
ALTER COLUMN column_name new_data_type(size);
新数据类型必须与旧数据类型兼容,否则,如果列具有数据且无法转换,则会出现转换错误。
请看下面示例。
首先,创建一个包含只有一列数据类型为INT
的新表:
CREATE TABLE t1 (c INT);
其次,在表中插入一些行:
INSERT INTO t1
VALUES
(1),
(2),
(3);
接下来,将列的数据类型从INT
修改为VARCHAR
:
ALTER TABLE t1 ALTER COLUMN c VARCHAR (2);
第三,插入带有字符串数据的新行:
INSERT INTO t1
VALUES
('@');
第四,将列的数据类型从VARCHAR
修改回INT
:
ALTER TABLE t1 ALTER COLUMN c INT;
SQL Server发出以下错误:
Conversion failed when converting the varchar value '@' to data type int.
2. 更改列的大小
以下语句创建一个新表,其中一列的数据类型为VARCHAR(10)
:
CREATE TABLE t2 (c VARCHAR(25));
将一些示例数据插入到t2
表中:
INSERT INTO t2
VALUES
('SQL Server'),
('Yiibai.com'),
('Kaops.com')
可以按如下方式增加列的大小,修改为:50
:
ALTER TABLE t2 ALTER COLUMN c VARCHAR (50);
但是,当减小列的大小时,SQL Server会检查现有数据以查看它是否可以根据新大小转换数据。 如果转换失败,SQL Server将终止该语句并发出错误消息。
例如,如果将列c
的大小减小为5
个字符:
ALTER TABLE t2 ALTER COLUMN c VARCHAR (5);
SQL Server发出以下错误:
String or binary data would be truncated.
3. 向可空列添加NOT NULL约束
以下语句创建一个具有可为空列的新表:
CREATE TABLE t3 (c VARCHAR(50));
以下语句向表中插入一些行:
INSERT INTO t3
VALUES
('Nullable column'),
(NULL);
如果要将NOT NULL
约束添加到列c
,则必须首先将NULL
更新为非null,例如:
UPDATE t3
SET c = ''
WHERE
c IS NULL;
然后再添加NOT NULL
约束:
ALTER TABLE t3 ALTER COLUMN c VARCHAR (20) NOT NULL;
在本教程中,学习了如何使用SQL Server ALTER TABLE ALTER COLUMN
来修改现有列的某些属性。