SQL Server (Transact-SQL) CREATE TABLE 语句用于创建新表。创建表涉及为表提供名称并定义每列的名称和数据类型(例如 varchar、整数、日期等)。

语法

使用的语法SQL Server (Transact-SQL) 中的 CREATE TABLE 语句如下:

CREATE TABLE table_name (
  column1 datatype,
  column2 datatype,
  column3 datatype,
  .....
  .....
); 

示例:创建表

下面提到的语句创建一个名为 Employee 的表,包含五列:EmpID、Name、City、Age 和 Salary .

CREATE TABLE Employee (
  EmpID INT NOT NULL,
  Name VARCHAR(255) NOT NULL,
  City VARCHAR(100),
  Age INT,
  Salary DECIMAL(18,2)
); 

在上面的语句中,数据类型指定列可以保存的数据类型。在数据类型之后,可以为每列提供可选属性,例如 NOT NULL 用于确保列不能有 NULL 值。有关详细信息,请参阅 SQL Server 约束

上述语句将创建一个名为Employee 的空表包含五列。成功创建表后,会显示一条消息。除此之外,还可以使用EXEC sp_columns命令进行检查,如下所示:

EXEC sp_columns Employee; 

上述代码的结果将类似于:

TABLE_OWNERTABLE_NAMECOLUMN_NAMEDATA_TYPETYPE_NAMEPRECISIONLENGTH
dboEmployeeEmpID4int identity104
dboEmployeeName12varchar255255
dboEmployeeCity12varchar100100
dboEmployeeAge4int104
dboEmployeeSalary3decimal1820

这表明Employee现在在数据库中可用,可用于存储与员工相关的信息。

使用另一个表创建表

SQL Server (Transact-SQL) SELECT INTO 语句用于通过复制现有表的列来从现有表创建表。以这种方式创建表时,新表将填充现有表中的记录(基于 SELECT 语句)。

语法

使用 SELECT INTO 的语法SQL Server (Transact-SQL) 中的语句如下:

/* 从一个表复制所有的字段 */
SELECT *
INTO new_table
FROM old_table
WHERE condition;

/* 从一个表复制所选择的字段创建新表 */
SELECT column1, column2, column3, ...
INTO new_table
FROM old_table
WHERE condition; 

示例:

考虑一个名为 Employee 的数据库表,其内容如下记录:

EmpIDNameCityAgeSalary
1JohnLondon253000
2MarryNew York242750
3JoParis272800
4KimAmsterdam303100
5RameshNew Delhi283000
6HuangBeijing282800

复制表的所有列:下面的语句用于复制Employee 表的所有列转换为名为 Employee_PT 的新表。新表将包含 Employee 表中员工年龄小于 28 岁的所有记录。

SELECT * INTO Employee_PT 
FROM Employee
WHERE Age < 28;

-- 查看结果
SELECT * FROM Employee_PT; 

这将产生如下所示的结果:

EmpIDNameCityAgeSalary
1JohnLondon253000
2MarryNew York242750
3JoParis272800

复制表的选定列:使用 SELECT INTO 语句时也可以复制选定列。在下面的示例中,复制的列为:EmpID、Name 和 City。

SELECT EmpID, Name, City INTO Employee_PT 
FROM Employee
WHERE Age < 28;

-- 查看结果
SELECT * FROM Employee_PT; 

这将产生如下所示的结果:

EmpIDNameCity
1JohnLondon
2MarryNew York
3JoParis

使用AS子句:AS子句可用于重命名列名。请参阅下面的示例:

SELECT EmpID, Name AS EmployeeName, City INTO Employee_PT 
FROM Employee
WHERE Age < 28;

-- 查看结果
SELECT * FROM Employee_PT; 

这将产生如下所示的结果:

EmpIDEmployeeNameCity
1JohnLondon
2MarryNew York
3JoParis