![SQL Server 2012实用教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/488/31729488/b_31729488.jpg)
4.3 使用Transact-SQL创建和管理表
4.3.1 使用Transact-SQL创建表
创建表的Transact-SQL语句是CREATE TABLE语句,其基本语法如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00063001.jpg?sign=1739293576-csIN2vLTwAUQXLQpY17dGCcbakqlpVjD-0-eafdd15503c2ab3744e3c9df53b5a710)
CREATE TABLE语句的参数及说明如表4.5所示。
表4.5 CREATE TABLE语句的参数及说明
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00063002.jpg?sign=1739293576-oxIUHysiqy5R3zwqhxojHxvHi5Nzhkxx-0-9fcda3b92c1d9f8cce102e453b32dad7)
【例4.8】成绩管理数据库AMDB中要继续增加新表,现在要增加的表是教师(teacher)表课程(course)表和,两个表的具体结构如表4.6和表4.7所示。
表4.6 教师(teacher)表
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00063003.jpg?sign=1739293576-Wuw0G4mfo1K4qPmZqiLvYDPTpcaMHEgd-0-a6d868c323ca80c9c71159f70f70ed89)
表4.7 课程(course)表
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00063004.jpg?sign=1739293576-G4lUyfyy9ciz9tJz96QWWrEoDQs9GXkV-0-cc996d6aed63cb83c0466a9a6dea42c3)
具体操作步骤如下:
(1)创建教师(teacher)表的SQL语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00064001.jpg?sign=1739293576-rhPjZTYh4YA3m6U2zYbF2Q6MXy5L6vLC-0-b84056d501c894462d05ea93e503490d)
(2)创建课程(course)表的SQL语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00064002.jpg?sign=1739293576-anXdXpKLusZXt2bH08zJLHPLr3fT5SYm-0-961008096666d42080157c5d8c176966)
4.3.2 使用Transact-SQL修改表字段
修改表字段的Transact-SQL语句是ALTER TABLE语句,其基本语法如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00064003.jpg?sign=1739293576-c6GYtm4Fv3TFv4w1RHdYNsV2bOakRq10-0-852a82e1b6c9125e291d69b3fc607b56)
ALTER TABLE语句的参数及说明如表4.8所示。
表4.8 ALTER TABLE语句的参数及说明
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00064004.jpg?sign=1739293576-SssDnlo3kZiCKIIoqWBHd6MRBHiDzH3P-0-d7ee40f95f37d5c323d4127cefa38c93)
【例4.9】现在要对成绩管理数据库AMDB中的表进行字段修改,修改的内容包括:
● 将教师(teacher)表职称proTitle字段的数据类型修改为varchar(5)。
● 增加教师(teacher)表政治面貌polity字段,数据类型char(2),不允许为空。
● 此外前面创建的学生(student)表中的年龄age字段可以由出生日期birthday字段计算获得,因此将学生(student)表中的年龄age字段删除。
具体操作步骤如下:
(1)修改教职称proTitle字段的SQL语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00065001.jpg?sign=1739293576-wGJnGqvxqDJQ3PLZ939iLaVuECJ1MFyH-0-f7ab07dd49ebf39c3ed9b5ad149d4f07)
(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语句在已建立表上进行约束的设置,其基本语法如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00065004.jpg?sign=1739293576-1e6Ra7hDgSr14EHuqOr1YEsbxoXeEyUu-0-8530570c36aa4e3ceb5f8a6d2d92a0db)
【例4.10】成绩管理数据库AMDB中要继续增加新表,现在要增加的表是成绩(grade)表,具体结构如表4.9所示,然后继续给grade表中的score字段追加检查约束,设置条件为成绩取值为0~100分之间。
表4.9 成绩(grade)表
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00065005.jpg?sign=1739293576-1D6AiGiLkmNrvfRUoBB2PVzJLE1X5rPM-0-5d3abec3221e707739de3971851e05d6)
具体操作步骤如下:
(1)创建成绩(grade)表的SQL语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00065006.jpg?sign=1739293576-erRP5XyysX1Y43WI4LLjX1xcj7QTLTZa-0-3eef3fa33cc1b8ee600d3e54d36da30a)
(2)给score字段的追加检查约束的SQL语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00065007.jpg?sign=1739293576-L7a3lKZU3QmbuIDO99PS8vyZoBQSnS62-0-2796eba73ddac7f602293496670b0d1c)
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的参数及说明
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00066003.jpg?sign=1739293576-obbFbWLtchVT1uZ6UKUALSlUbFXa8V3I-0-c64afc68396306f089cce6753d7bd77a)
【例4.11】将成绩管理数据库AMDB中grade表更名为score。
SQL语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00066004.jpg?sign=1739293576-2qLiNHzY8rrvUAEQnRr3pdmatrYBSBc3-0-4faec69b92aa60c9c702867a5a73fcbd)
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语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00066006.jpg?sign=1739293576-u4LBpAg6h3lrZBUwAtFj1mzyWQ9kEtbL-0-39db06bee420da9c5c434ac305bcf1d0)
注意:
不能使用DROP TABLE删除被FOREIGN KEY约束引用的表。必须先删除引用FOREIGN KEY约束或引用表。如果要在同一个DROP TABLE语句中删除引用表以及包含主键的表,则必须先列出引用表。
如果要删除通过外键和主键约束的外键表和主键表,则必须首先删除外键表。如果要删除外键约束中引用的主键表而不删除外键表,则必须删除外键表的外键约束。
删除表时,表的规则或默认值将被解除绑定,与该表关联的任何约束或触发器将被自动删除。