![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=1739593120-iKAQwsKH70Y7Y1SDvnckGhRBpdXTE8Bg-0-bd82d4f9ce93011a497dca6b28c210d3)
CREATE TABLE语句的参数及说明如表4.5所示。
表4.5 CREATE TABLE语句的参数及说明
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00063002.jpg?sign=1739593120-EKLeDeoFRSAnS5JNu9O7T2nAZDfYGjeQ-0-49815a729939c99125e12d96153f49c8)
【例4.8】成绩管理数据库AMDB中要继续增加新表,现在要增加的表是教师(teacher)表课程(course)表和,两个表的具体结构如表4.6和表4.7所示。
表4.6 教师(teacher)表
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00063003.jpg?sign=1739593120-KgVAQ7nVLmsk0p9sz08EG985XPW3ds6H-0-354fdcf360ec3c2ee1ea1553a2951829)
表4.7 课程(course)表
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00063004.jpg?sign=1739593120-36c2RIvNzZbZqVYMs4bFOKpBsrvnpwnq-0-708f4835e1263081e316b5134239d4b0)
具体操作步骤如下:
(1)创建教师(teacher)表的SQL语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00064001.jpg?sign=1739593120-Bk3D6DaiqHIcJ1E7gXBDQFBHux4gsd8k-0-bbe5cdbd61169335dcf4889d0c88d1b7)
(2)创建课程(course)表的SQL语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00064002.jpg?sign=1739593120-bPXfgesmMLDX0QWCzcRv3rxMqM4MPWRZ-0-7d3b5f0ba9c1be3736b236c8ff54db7c)
4.3.2 使用Transact-SQL修改表字段
修改表字段的Transact-SQL语句是ALTER TABLE语句,其基本语法如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00064003.jpg?sign=1739593120-myPeEYc53H3F4flC19jA7DrdQOX9yJpW-0-14db8426aa171bf357e4672c81cb9629)
ALTER TABLE语句的参数及说明如表4.8所示。
表4.8 ALTER TABLE语句的参数及说明
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00064004.jpg?sign=1739593120-RoUFJcdfwz4y5Qq10kKyYZxEGD4AzEuf-0-23c042402559e74a076972ba282723cf)
【例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=1739593120-id22EZgns9JUPotOqesGVTV4BGGLvxtq-0-3b3060dba83b683169c466ad851cf6ab)
(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=1739593120-DWxuhf0lpfKkorpDpmVOPYRQ8y0EkBrU-0-e2e413935b2fd3dee9163433e275c9f2)
【例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=1739593120-JFQdlAx3ZyxgHzIsSrJ4I6N1cX9XrMXR-0-eb5d2d4efffe35f02c570b86361c17ae)
具体操作步骤如下:
(1)创建成绩(grade)表的SQL语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00065006.jpg?sign=1739593120-o3kxHkP3eVvJ0T5IfHh5NAf6QcQlsaPz-0-650255ea416e0252ae8e9d88a7ab2601)
(2)给score字段的追加检查约束的SQL语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00065007.jpg?sign=1739593120-ir5EMm5IQC1IvJTJN056oAK9wNEV4m8n-0-075cab35ad0f0d73c28c8e1b39e2f88b)
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=1739593120-W65SoL0BGJkr0nkqouLTmi5wgLXEzZR6-0-ec7978611f2333a3bb75a284e3ad1145)
【例4.11】将成绩管理数据库AMDB中grade表更名为score。
SQL语句如下:
![](https://epubservercos.yuewen.com/FC825E/17180250504495406/epubprivate/OEBPS/Images/img00066004.jpg?sign=1739593120-UAJYczB5DUDXYMTwPO3xhb2RIJfS4pVV-0-24573c30e1a2b5d1c0f43a9bdee88b2b)
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=1739593120-BGFRSaPc0C4jPCZon2DiP56dFjzaezcC-0-8e084167a35787295be2f5168456a9c5)
注意:
不能使用DROP TABLE删除被FOREIGN KEY约束引用的表。必须先删除引用FOREIGN KEY约束或引用表。如果要在同一个DROP TABLE语句中删除引用表以及包含主键的表,则必须先列出引用表。
如果要删除通过外键和主键约束的外键表和主键表,则必须首先删除外键表。如果要删除外键约束中引用的主键表而不删除外键表,则必须删除外键表的外键约束。
删除表时,表的规则或默认值将被解除绑定,与该表关联的任何约束或触发器将被自动删除。