使用 T-SQL 命令创建表创建表使用“CREATE TABLE”语句。

语法格式:

create table   [ database_name . [ schema_name ] . |schema_name . ] table_name 
  (   
	{ <column_definition>     /*列的定义*/    
		
	| column_name AS computed_column_expression  [PERSISTED [NOT NULL]]           /*定义计算列*/   }  
		  
        [ <table_constraint> ] [ ,...n ]    /*指定表的约束*/  )  

 [ ; ]

 

其中
<column_definition> ::= 
column_name data_type     /*指定列名、类型*/     
[ NULL | NOT NULL ]     /*指定是否为空*/   
[       
   [ CONSTRAINT constraint_name ]  /*指定约束名*/ 
   [ DEFAULT constant_expression ]   /*指定默认值*/       | 
   [ IDENTITY [ ( seed , increment )] [ NOT FOR REPLICATION ]   /*指定为标识列*/   ]
   [ <column_constraint> [ ...n ]
]     /*指定列的约束*/

参数说明

<column_constraint> 、<table_constraint > 两类约束

database_name:在其中创建表的数据库的名称。database_name 必须指定现有数据库 的名称。如果未指定,则database_name 默认为当前数据库

schema_name:新表所属架构的名称。

table_name:新表的名称。表名必须遵循标识符规则

column_name:表中列的名称。列名必须遵循标识符规则,并在表中唯一。如果未指定column_name,则timestamp列的名称将默认为 timestamp。

computed_column_expression:定义计算列的值的表达式。计算列并不是物理地存储在表中的虚拟列,除非此列标记为PERSISTED。该列由同一表中的其他列通过表达式计算得到。例如,计算列可以定义为 cost AS price *qty。表达式可以是非计算列 的列名、常量、函数、变量,也可以是用一个或多个运算符连接的上述元素的任意组合表达式不能是子查询,也不能包含别名数据类型

计算列可用于选择列表、WHERE 子句、ORDER BY 子句或任何其他可使用正则表达式的位置
但下列情况除外:

计算列不能用作DEFAULT或FOREIGN KEY 约束定义,也不能与NOT NULL约束定义一起使用。但是,如果计算列的值由具有确定性的表达式定义,并且 索引列中允许计算结果的数据类型,则可将该列用作索引中的键列,或用作PRIMARY KEY 或 UNIQUE 约束的一部分。例如, z 如果表中含有整数列 a 和 b,则可以对计算列 a+b创建索引,但不能对计算 列 a + DATEPART(dd, GETDATE())创建索引,因在以后的调用中,其值可能发 生改变。计算列不能作为 INSERT 或 UPDATE 语句的目标。

PERSISTED:指定 SQL Server Database Engine 将在表中物理存储计算值,而且,当计算列依赖的任何其他列发生更新时对这些计算值进行更新。将计算列标记为PERSISTED,可允许您对具有确定性、但不精确的计算列创建索引。用作已分区表 的分区依据列的所有计算列都必须显式标记为PERSISTED。指定 PERSISTED computed_column_expression 必须具

创建表操作
基于前面学习练习创建的数据库DB001进行操作,创建常做例题的四表:Student(学习信息表)、Teacher(教师信息表)、Course(课程信息表)、SC(成绩表)

--在创建的数据库DB001中,创建学生信息表
use DB001
go
create table Student
(
 SID  char(10) not null primary key,
 Sname char(8) not null,
 Sage int not null,
 sex char(2) check(sex='男' or sex='女') default '男',
 remark varchar(50) null
)
go

--在创建的数据库DB001中,创建教师信息表
use DB001
go
create table Teacher
(
 TID char(10) primary key,
 Tname varchar(10) not null,
 Tdepart varchar(15)
)

--在创建的数据库DB001中,创建课程信息表
use DB001
go
create table Course
(
 CID char(10) primary key,
 TID char(10) foreign key references Teacher(TID),
 Cname char(15) not null
)

--在创建的数据库DB001中,创建成绩表
use DB001
go
create table SC
(
 SID char(10) foreign key(SID) references Student(SID),
 CID char(10) foreign key references Course(CID),
 Score int  not null
)

心得:在表的创建过程中,一定要避免拿到表需求就直接创建,先捋顺各个表之间的关联和关联字段(主键和外键),然后先创建主表再创建附表(含有外键)。捋顺表与表之间的关联,确定好主键和外键后,接着便是弄清字段及字段的属性以及对字段的约束等。