Answers:
用途SELECT ... INTO
:
SELECT *
INTO ABC_1
FROM ABC;
这将创建一个新表ABC_1
,该表具有与列相同的列结构ABC
并包含相同的数据。但是,约束(例如键,默认值)不会被复制。
您可以使用不同的表名多次运行此查询。
如果您不需要复制数据,只需创建一个具有相同列结构的空表,则添加一个WHERE
带有虚假表达式的子句:
SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;
SELECT TOP(0) *
清洁剂不是总是虚假的WHERE
声明方法
在SSMS中,在“ 对象资源管理器”中展开数据库,转到“ 表”,右键单击所需的表,然后选择“ 脚本表为”,“ 创建为”,“ 新查询编辑器”窗口。查找并替换(CTRL + H)来更改表名(即放在ABC
“ 查找内容”字段和ABC_1
“ 替换为”中,然后单击“ 确定”)。
其他显示如何通过SQL执行此操作的答案也可以很好地工作,但是此方法的不同之处在于,您还将获得任何索引,约束和触发器。
如果要包括数据,请在创建此表后运行以下脚本以从ABC复制所有数据(如果具有标识字段,则保留相同的ID值):
set identity_insert ABC_1 on
insert into ABC_1 (column1, column2) select column1, column2 from ABC
set identity_insert ABC_1 off
IDENTITY_INSERT
为ON才能允许“手动”设置标识列,并且在示例中混合了顺序。另外,您必须明确列出您的资料栏
如果要复制具有所有约束和键的表,请执行以下步骤:
然后,要复制数据,请运行以下脚本:
SET IDENTITY_INSERT DuplicateTable ON
INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... )
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable
SET IDENTITY_INSERT DuplicateTable OFF
这是另一个选择:
select top 0 * into <new_table> from <original_table>