如何创建具有相同约束和索引的新表?

Vin*_* _S 11 index database-design sql-server constraint sql-server-2008-r2

我正在创建一个带有主键约束和该表中的非聚集索引的新表。

我知道,我想创建另一个具有相同结构和值以及键和索引的表。

create table Dummy (id integer ,name varchar(20),salary integer
Constraint PK_Con_id primary key(id))

insert into Dummy values(11,'AAA',1000);
insert into Dummy values(12,'BBB',2000);
insert into Dummy values(13,'CCC',3000);
insert into Dummy values(14,'DDD',4000);

select * from Dummy;

create nonclustered index IX_Name 
on Dummy(Name)
Run Code Online (Sandbox Code Playgroud)

现在我正在创建Dmy表,但键和约束没有反映Dmy在 SQL Server 2008 R2 的表中。

SELECT * 
INTO Dmy 
FROM Dummy
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 16

SELECT INTO 不会为你做这件事,因为虽然它维护了列名和数据类型,但它并没有保留表的很多其他方面,比如约束、索引等。唯一真正的如果其中一列具有 IDENTITY 属性,则保留在列之外。

在对象资源管理器中右键单击原始表,然后选择脚本表为 > 创建到 > 新建查询窗口。您应该为原始表创建一个 CREATE TABLE 脚本,包括所有约束等。请注意,您可能必须将其中一些设置(工具 > 选项 > SQL Server 对象资源管理器 > 脚本)设置为 true 以获取所有你想要的表属性,所以这可能需要一些试验和错误:

工具 > 选项 > SQL Server 对象资源管理器 > 脚本下的选项

现在,只需手动修改该脚本以指定新表名,并确保调整所有约束和索引名称,使它们是唯一的(这将需要多少工作取决于您是否有既定的命名约定或如果你只是接受 SQL Server 会扔给你的东西)。


小智 5

所有这些都可以在 SQL Server Management Studio 中完成。

脚本表作为选项生成创建用于初级和外键和约束的代码。它不会为索引创建脚本,因此您必须在另一个步骤中执行此操作。类型,我建议在 SSMS 对象资源管理器中扩展所有对象类型节点。

在此处输入图片说明

为表结构、主外键和约束创建脚本

  1. 运行SQL Server Management Studio
  2. 对象资源管理器中,展开数据库
  3. 展开表格
  4. 右键单击该表并选择Script table as | 创建到 | 新查询编辑器窗口

在此处输入图片说明

生成的脚本将显示在查询编辑器选项卡中。确保更改表、主键和外键以及约束名称,因为这些名称必须是唯一的。

否则,您将收到一条错误消息,内容类似于“数据库中已经存在名为“地址”的对象。, 或'操作失败,因为名称为 'AK_Address_rowguid' 的索引或统计信息已存在于表 'Person.Address' 中。

为索引创建脚本

使用与上述类似的步骤:

在此处输入图片说明

为数据创建 INSERT INTO 脚本

  1. 右键单击数据库(不是表!)
  2. 打开任务 | 生成脚本
  3. 在“选择对象”选项卡上,选择要编写脚本的表

在此处输入图片说明

4.在设置脚本选项选项卡中,单击高级并确保脚本的数据类型选项设置为仅数据

注意:如果您选择架构和数据,则生成的架构脚本将与本答案中第一种方法中生成的脚本相同。

在此处输入图片说明

5.执行脚本前将表名更新为新表名