在本教學中,將學習如何使用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'),
('xuhuhu.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
來修改現有列的某些屬性。
上一篇:
SQL Server數據定義
下一篇:
SQL Server修改數據