SQL Server修改表的列

在本教學中,將學習如何使用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修改數據