
4.3 使用Transact-SQL创建和管理表
4.3.1 使用Transact-SQL创建表
创建表的Transact-SQL语句是CREATE TABLE语句,其基本语法如下:

CREATE TABLE语句的参数及说明如表4.5所示。
表4.5 CREATE TABLE语句的参数及说明

【例4.8】成绩管理数据库AMDB中要继续增加新表,现在要增加的表是教师(teacher)表课程(course)表和,两个表的具体结构如表4.6和表4.7所示。
表4.6 教师(teacher)表

表4.7 课程(course)表

具体操作步骤如下:
(1)创建教师(teacher)表的SQL语句如下:

(2)创建课程(course)表的SQL语句如下:

4.3.2 使用Transact-SQL修改表字段
修改表字段的Transact-SQL语句是ALTER TABLE语句,其基本语法如下:

ALTER TABLE语句的参数及说明如表4.8所示。
表4.8 ALTER TABLE语句的参数及说明

【例4.9】现在要对成绩管理数据库AMDB中的表进行字段修改,修改的内容包括:
● 将教师(teacher)表职称proTitle字段的数据类型修改为varchar(5)。
● 增加教师(teacher)表政治面貌polity字段,数据类型char(2),不允许为空。
● 此外前面创建的学生(student)表中的年龄age字段可以由出生日期birthday字段计算获得,因此将学生(student)表中的年龄age字段删除。
具体操作步骤如下:
(1)修改教职称proTitle字段的SQL语句如下:

(2)增加政治面貌polity字段的SQL语句如下:
ALTER TABLE[dbo].[teacher] --修改表teacher
ADD polity char(2)not null --增加polity字段
(3)删除照片imagephoto字段的SQL语句如下:
ALTER TABLE[dbo].[student] --修改表student
DROP COLUMN age --删除age字段
4.3.3 使用Transact-SQL设置表约束
创建约束的Transact-SQL语句有两种:一种是CREATE TABLE语句,在创建表的时候就指定约束;另一种是ALTER TABLE语句在已建立表上进行约束的设置,其基本语法如下:

【例4.10】成绩管理数据库AMDB中要继续增加新表,现在要增加的表是成绩(grade)表,具体结构如表4.9所示,然后继续给grade表中的score字段追加检查约束,设置条件为成绩取值为0~100分之间。
表4.9 成绩(grade)表

具体操作步骤如下:
(1)创建成绩(grade)表的SQL语句如下:

(2)给score字段的追加检查约束的SQL语句如下:

4.3.4 使用Transact-SQL重命名表
重命名表的Transact-SQL是采用系统存储过程sp_rename,它的功能是在当前数据库中更改用户创建对象的名称。此对象可以是表、索引、列、别名数据类型或Microsoft.NET Framework公共语言运行时(CLR)用户定义类型。其基本语法如下:
sp_rename[@objname=]’object_name’,[@newname=]’new_name’
[,[@objtype=]’object_type’]
系统存储过程sp_rename的参数及说明如表4.10所示。
表4.10 系统存储过程sp_rename的参数及说明

【例4.11】将成绩管理数据库AMDB中grade表更名为score。
SQL语句如下:

4.3.5 使用Transact-SQL删除表
删除表的Transact-SQL语句是DROP DATABASE语句,其基本语法如下:
DROP TABLE[database_name.[schema_name].
|schema_name.]table_name[,...n][;]
【例4.12】使用DROP TABLE语句删除ReportServer数据库上的DataSets和ConfigurationInfo表。
【例4.12】
SQL语句如下:

注意:
不能使用DROP TABLE删除被FOREIGN KEY约束引用的表。必须先删除引用FOREIGN KEY约束或引用表。如果要在同一个DROP TABLE语句中删除引用表以及包含主键的表,则必须先列出引用表。
如果要删除通过外键和主键约束的外键表和主键表,则必须首先删除外键表。如果要删除外键约束中引用的主键表而不删除外键表,则必须删除外键表的外键约束。
删除表时,表的规则或默认值将被解除绑定,与该表关联的任何约束或触发器将被自动删除。