`
adm889486
  • 浏览: 38470 次
  • 性别: Icon_minigender_1
  • 来自: 绵阳
社区版块
存档分类
最新评论

ALTER TABLE (Transact-SQL) 示例

阅读更多
A. 添加新列
以下示例将添加一个允许空值的列,而且没有通过 DEFAULT 定义提供的值。 在该新列中,每一行都将有 NULL 值。

CREATE TABLE dbo.doc_exa (column_a INT) ; GO
ALTER TABLE dbo.doc_exa ADD column_b VARCHAR(20) NULL ; GO
EXEC sp_help doc_exa ; GO DROP TABLE dbo.doc_exa ; GO
B. 删除列
以下示例将修改一个表以删除列。

CREATE TABLE dbo.doc_exb (column_a INT, column_b VARCHAR(20) NULL) ; GO
ALTER TABLE dbo.doc_exb DROP COLUMN column_b ; GO EXEC sp_help doc_exb ; GO
DROP TABLE dbo.doc_exb ; GO
C. 更改列的数据类型
以下示例将表中列的数据类型由 INT 改为 DECIMAL。

CREATE TABLE dbo.doc_exy (column_a INT ) ; GO
INSERT INTO dbo.doc_exy (column_a) VALUES (10) ; GO
ALTER TABLE dbo.doc_exy ALTER COLUMN column_a DECIMAL (5, 2) ; GO
DROP TABLE dbo.doc_exy ; GO
D. 添加包含约束的列
以下示例将添加一个包含 UNIQUE 约束的新列。

CREATE TABLE dbo.doc_exc (column_a INT) ; GO
ALTER TABLE dbo.doc_exc ADD column_b VARCHAR(20) NULL CONSTRAINT exb_unique UNIQUE ; GO
EXEC sp_help doc_exc ; GO DROP TABLE dbo.doc_exc ; GO
E. 在现有列中添加一个未经验证的 CHECK 约束
以下示例将在表中的现有列中添加一个约束。 该列包含一个违反约束的值。 因此,将使用 WITH NOCHECK 以避免根据现有行验证该约束,从而允许添加该约束。

CREATE TABLE dbo.doc_exd ( column_a INT) ; GO
INSERT INTO dbo.doc_exd VALUES (-1) ; GO
ALTER TABLE dbo.doc_exd WITH NOCHECK ADD CONSTRAINT exd_check CHECK (column_a > 1) ; GO
EXEC sp_help doc_exd ; GO DROP TABLE dbo.doc_exd ; GO
F. 在现有列中添加一个 DEFAULT 约束
以下示例将创建一个包含两列的表,在第一列插入一个值,另一列保持为 NULL。 然后在第二列中添加一个 DEFAULT 约束。 验证是否已应用了默认值,另一个值是否已插入第一列以及是否已查询表。

CREATE TABLE dbo.doc_exz ( column_a INT, column_b INT) ; GO
INSERT INTO dbo.doc_exz (column_a)VALUES ( 7 ) ; GO
ALTER TABLE dbo.doc_exz ADD CONSTRAINT col_b_def DEFAULT 50 FOR column_b ; GO
INSERT INTO dbo.doc_exz (column_a) VALUES ( 10 ) ; GO
SELECT * FROM dbo.doc_exz ; GO DROP TABLE dbo.doc_exz ; GO
G. 添加多个包含约束的列
以下示例将添加多个包含随新列定义的约束的列。 第一个新列具有 IDENTITY 属性。 表中的每一行在标识列中都有新的增量值。

CREATE TABLE dbo.doc_exe ( column_a INT CONSTRAINT column_a_un UNIQUE) ; GO
ALTER TABLE dbo.doc_exe ADD
-- Add a PRIMARY KEY identity column.
column_b INT IDENTITY CONSTRAINT column_b_pk PRIMARY KEY,
-- Add a column that references another column in the same table.
column_c INT NULL CONSTRAINT column_c_fk REFERENCES doc_exe(column_a),
-- Add a column with a constraint to enforce that
-- nonnull data is in a valid telephone number format.
column_d VARCHAR(16) NULL CONSTRAINT column_d_chk CHECK (column_d LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' OR column_d LIKE '([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),
-- Add a nonnull column with a default.
column_e DECIMAL(3,3) CONSTRAINT column_e_default DEFAULT .081 ; GO
EXEC sp_help doc_exe ; GO DROP TABLE dbo.doc_exe ; GO
H. 添加包含默认值的可为空的列
以下示例将添加一个包含 DEFAULT 定义的可为空的列,并使用 WITH VALUES 为表中的各个现有行提供值。 如果没有使用 WITH VALUES,那么每一行的新列中都将具包含 NULL 值。

USE AdventureWorks ; GO
CREATE TABLE dbo.doc_exf ( column_a INT) ; GO
INSERT INTO dbo.doc_exf VALUES (1) ; GO
ALTER TABLE dbo.doc_exf ADD AddDate smalldatetime NULL CONSTRAINT AddDateDflt DEFAULT GETDATE() WITH VALUES ; GO
DROP TABLE dbo.doc_exf ; GO
I. 禁用和重新启用约束
以下示例将禁用对数据中接受的薪金进行限制的约束。NOCHECK CONSTRAINT 将与 ALTER TABLE 配合使用来禁用该约束,从而允许执行通常会违反该约束的插入操作。CHECK CONSTRAINT 将重新启用该约束。

CREATE TABLE dbo.cnst_example (id INT NOT NULL, name VARCHAR(10) NOT NULL, salary MONEY NOT NULL CONSTRAINT salary_cap CHECK (salary < 100000) );
-- Valid inserts
INSERT INTO dbo.cnst_example VALUES (1,'Joe Brown',65000);
INSERT INTO dbo.cnst_example VALUES (2,'Mary Smith',75000);
-- This insert violates the constraint.
INSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);
-- Disable the constraint and try again.
ALTER TABLE dbo.cnst_example NOCHECK CONSTRAINT salary_cap; I
NSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);
-- Re-enable the constraint and try another insert; this will fail.
ALTER TABLE dbo.cnst_example CHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (4,'Eric James',110000) ;
J. 删除约束
以下示例将从表中删除 UNIQUE 约束。

CREATE TABLE dbo.doc_exc ( column_a INT CONSTRAINT my_constraint UNIQUE) ; GO
ALTER TABLE dbo.doc_exc DROP CONSTRAINT my_constraint ; GO
DROP TABLE dbo.doc_exc ; GO
K. 在表之间切换分区
以下示例创建一个已分区表,并假定在数据库中已经创建了分区方案 myRangePS1。 然后,在 PartitionTable 表的 PARTITION 2 所在的同一文件组中,创建与已分区表结构相同的未分区的表。 最后,将 PartitionTable 表的 PARTITION 2 中的数据切换到 NonPartitionTable 表中。

CREATE TABLE PartitionTable (col1 int, col2 char(10)) ON myRangePS1 (col1) ; GO
CREATE TABLE NonPartitionTable (col1 int, col2 char(10)) ON test2fg ; GO
ALTER TABLE PartitionTable SWITCH PARTITION 2 TO NonPartitionTable ; GO
L. 禁用和重新启用触发器
以下示例将使用 ALTER TABLE 的 DISABLE TRIGGER 选项来禁用触发器,以允许执行通常会违反此触发器的插入操作。然后,使用 ENABLE TRIGGER 重新启用触发器。

CREATE TABLE dbo.trig_example (id INT, name VARCHAR(12), salary MONEY) ; GO
-- Create the trigger.
CREATE TRIGGER dbo.trig1 ON dbo.trig_example FOR INSERT AS IF (SELECT COUNT(*) FROM INSERTED WHERE salary > 100000) &gt; 0 BEGIN print 'TRIG1 Error: you attempted to insert a salary &gt; $100,000' ROLLBACK TRANSACTION END ; GO
-- Try an insert that violates the trigger.
INSERT INTO dbo.trig_example VALUES (1,'Pat Smith',100001) ; GO
-- Disable the trigger.
ALTER TABLE dbo.trig_example DISABLE TRIGGER trig1 ; GO
-- Try an insert that would typically violate the trigger.
INSERT INTO dbo.trig_example VALUES (2,'Chuck Jones',100001) ; GO
-- Re-enable the trigger.
ALTER TABLE dbo.trig_example ENABLE TRIGGER trig1 ; GO
-- Try an insert that violates the trigger.
INSERT INTO dbo.trig_example VALUES (3,'Mary Booth',100001) ; GO
M. 创建包含索引选项的 PRIMARY KEY 约束
以下示例将创建 PRIMARY KEY 约束 PK_TransactionHistoryArchive_TransactionID,并设置 FILLFACTOR、ONLINE 和 PAD_INDEX 选项。 生成的聚集索引将与约束同名。

USE AdventureWorks; GO
ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID) WITH (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON) GO
N. 在 ONLINE 模式下删除 PRIMARY KEY 约束
以下示例在 ONLINE 选项设置为 ON 的情况下删除 PRIMARY KEY 约束。

USE AdventureWorks; GO
ALTER TABLE Production.TransactionHistoryArchive DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID WITH (ONLINE = ON); GO
O. 添加和删除 FOREIGN KEY 约束
以下示例将创建 ContactBackup 表,然后更改此表。首先添加引用 Contact 表的 FOREIGN KEY 约束,然后再删除 FOREIGN KEY 约束。

USE AdventureWorks ; GO
CREATE TABLE Person.ContactBackup (ContactID int) ; GO
ALTER TABLE Person.ContactBackup ADD CONSTRAINT FK_ContactBacup_Contact FOREIGN KEY (ContactID) REFERENCES Person.Contact (ContactID) ;
ALTER TABLE Person.ContactBackup DROP CONSTRAINT FK_ContactBacup_Contact ; GO
DROP TABLE Person.ContactBackup ;
P. 更改列的大小
以下示例将增大 varchar 列的大小并增加 decimal 列的精度和小数位数。 由于列中包含数据,因此只能增大列的大小。 另外还请注意,col_a 是在唯一索引中定义的。 由于数据类型为 varchar 且索引不是 PRIMARY KEY 约束的结果,因此仍可增大 col_a 的大小。

IF OBJECT_ID ( 'dbo.doc_exy', 'U' ) IS NOT NULL DROP TABLE dbo.doc_exy; GO
-- Create a two-column table with a unique index on the varchar column.
CREATE TABLE dbo.doc_exy ( col_a varchar(5) UNIQUE NOT NULL, col_b decimal (4,2)); GO
INSERT INTO dbo.doc_exy VALUES ('Test', 99.99); GO
-- Verify the current column size.
SELECT name, TYPE_NAME(system_type_id), max_length, precision, scale FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.doc_exy'); GO
-- Increase the size of the varchar column.
ALTER TABLE dbo.doc_exy ALTER COLUMN col_a varchar(25); GO
-- Increase the scale and precision of the decimal column.
ALTER TABLE dbo.doc_exy ALTER COLUMN col_b decimal (10,4); GO
-- Insert a new row.
INSERT INTO dbo.doc_exy VALUES ('MyNewColumnSize', 99999.9999) ; GO
-- Verify the current column size.
SELECT name, TYPE_NAME(system_type_id), max_length, precision, scale FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.doc_exy');
分享到:
评论

相关推荐

    Ken Henderson__The Guru's Guide to Transact-SQL

    - **详实的示例**:书中包含大量实用示例,帮助读者理解和掌握Transact-SQL的各种语法和技巧。 - **深度解析**:对Transact-SQL的每个方面都有深入的讲解,不仅教授如何使用,还解释了背后的原理和最佳实践。 - *...

    Transact-SQL.rar_Transact-SQL chm

    `Transact-SQL 参考.chm`文件很可能会涵盖这些主题,并可能深入到每个话题的细节,包括语法示例、最佳实践和常见问题解答。通过这个文档,无论是初学者还是经验丰富的开发人员,都可以深化对T-SQL的理解,提高数据库...

    Transact-SQL用户指南_sybase

    - `ALTER TABLE`: 修改现有表结构。 - `DROP TABLE`: 删除表。 例如,创建一个名为 `Customers` 的表: ```sql CREATE TABLE Customers ( ID int PRIMARY KEY, Name nvarchar(50), Address nvarchar(100) ); ``...

    T-SQL示例大全.rar_sql_t-sql_windows sql

    《T-SQL示例大全》是一个综合性的资源集合,涵盖了SQL语言中的Transact-SQL(T-SQL)的大量实例,适用于在Windows环境下使用SQL Server数据库管理系统进行开发和管理的人员。T-SQL是Microsoft SQL Server所扩展的...

    T-SQL:Easy Transact-SQL示例

    10. **DDL(Data Definition Language)语句**:用于定义和修改数据库结构,如CREATE TABLE、ALTER TABLE和DROP TABLE。 11. **存储过程**:预编译的SQL语句集合,可以接受参数,执行复杂操作,并返回结果。存储...

    数据定义与简单查询实验

    - 使用Transact-SQL语句:编写ALTER TABLE语句添加CHECK约束和FOREIGN KEY约束。 - **具体实现**: - 外键约束:如在借阅表中添加对外键的约束,确保“书号”和“读者编号”引用的是现有图书表和读者表中的记录。 ...

    T-SQL帮助文档和学习资料

    **T-SQL(Transact-SQL)是微软SQL Server数据库管理系统中用于管理和操作数据的编程语言。它基于标准的SQL,但添加了更多的扩展功能,以支持存储过程、触发器、函数和其他数据库交互操作。本资源集合包含了T-SQL的...

    T-SQL编程入门(SQL Server)

    T-SQL (Transact-SQL) 是 Microsoft SQL Server 使用的一种扩展版本的 SQL 语言,它提供了额外的功能来增强 SQL 的功能,使开发者能够更高效地管理和操作数据库。 - **DML (数据操作语言 Data Manipulation ...

    常用的T-SQL语句

    - 示例:`ALTER TABLE Employees ADD Salary DECIMAL(10, 2);` #### 数据操纵语言(DML) - **`SELECT`**:从一个或多个表中检索数据。 - 示例:`SELECT * FROM Employees WHERE Age &gt; 30;` - **`INSERT`**:向...

    t-sql基础教程

    T-SQL,全称Transact-SQL,是SQL(Structured Query Language)的一种扩展,主要用于Microsoft SQL Server数据库管理系统中。它是数据库管理员和开发人员用来查询、操纵、更新和管理数据库的标准语言。本教程“T-SQL...

    T-sql 语言大全

    - **DDL**:数据定义语言,用于创建和管理数据库结构,如`CREATE DATABASE`、`ALTER TABLE`、`DROP TABLE`和`CREATE INDEX`。 5. **T-SQL扩展** - T-SQL增加了如`BEGIN TRANSACTION`和`COMMIT`等用于事务处理的...

    Transact_SQL小手册

    - **示例**:`ALTER TABLE employees ADD middle_name varchar(50);` ### 视图管理 #### 创建视图 (CREATE VIEW) - **基本语法**:`CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name ...

    T-SQL.rar_sql

    1. **T-SQL基础**:T-SQL(Transact-SQL)是SQL Server使用的扩展SQL语言,用于数据查询、数据库管理、数据修改和过程编程。第2章的代码可能涉及基础的SELECT语句、FROM子句、WHERE子句以及聚合函数如COUNT()、SUM()...

    sql的课后答案

    - **修改视图**:掌握使用Transact-SQL中的 `ALTER VIEW` 语句修改现有视图的方法。 #### SQL索引类型 - **主键索引**:确保表中的某列或某几列具有唯一值,并作为表的主键使用。 - **非聚集索引**:与表的数据物理...

    T-SQL SQL Server

    T-SQL(Transact-SQL)是SQL Server的扩展,它增加了许多特性和功能,使得开发者能够更有效地管理和操作数据。本压缩包文件“T-SQL”可能包含了一系列与T-SQL相关的脚本或教程,旨在帮助用户提升SQL Server的使用...

    Sams.Teach.Yourself.Microsoft.SQ.Server.T-SQL.in.10.Minutes

    - **示例**:`ALTER TABLE Employees ADD Department varchar(50);` - **删除表**:使用`DROP TABLE`语句删除表。 - **示例**:`DROP TABLE Employees;` ##### 5. 存储过程 - **定义**:存储过程是一组预编译的...

    T-SQL语法大全

    **T-SQL**(Transact-SQL)是Microsoft SQL Server使用的SQL方言,它扩展了标准SQL的功能,提供了更强大的数据管理和编程能力。T-SQL由以下几个主要部分组成: 1. **DML(数据操作语言Data Manipulation Language)**: ...

    T-SQL小手册

    根据提供的T-SQL小手册内容,我们可以详细地探讨与这些命令相关的知识点,这些知识点对于学习和使用T-SQL(Transact-SQL)来说至关重要。以下是各个关键字及其应用场景的详细介绍: ### SELECT `SELECT` 语句用于...

Global site tag (gtag.js) - Google Analytics