在SQL Server中,“CREATE TABLE ... LIKE ...”的等效语句是什么?

27

我正在使用SQL Server(我是一个SQL Server新手)并尝试更改表。我想要使用CREATE TABLE LIKE来安全地存储数据,同时删除原始表上的键、约束和其他繁琐的操作,但我没有找到与该命令匹配的选项...


我使用Visual Studio SQL Server Explorer来实现这个目的,它允许自动更新数据库结构。 - Ginden
2个回答

45

您想重新创建相同的结构吗?

这样如何?

 SELECT *
 into test
 FROM myRealTable
 where 0=1

新表中将不插入任何数据


13
SELECT top 0 * into test FROM myRealTable,也可以达到相同的结果。 - Kev Riley

24

你可以这样做

SELECT * INTO #MyTable_tmp FROM MyTable
然后修改您的 MyTable,并将数据复制回去。我见过的其他方法是创建一个名为 Mytable_Tmp 的新表(不是临时表),它将成为您的新表。
然后复制您的数据,进行任何迁移。然后您将删除原始表并在 Mytable 上进行重命名。
或者,您可以使用许多优秀的工具之一来比较数据库并生成差异脚本或 VSTS DB Edition(带有开发人员),您可以从项目文件到数据库执行差异脚本。
编辑 当您运行 SELECT * INTO #MyTable FROM MyTable 时,SQL Server 将创建一个名为 #MyTable 的新临时表,该表匹配您选择子句中的每个列和数据类型。在这种情况下,我们选择 *,因此它将与 MyTable 匹配。这仅会创建列,而不会复制默认值、约束、索引或任何其他内容。

1
我的问题不是如何将数据放入已经存在的临时表中。我更关心的是创建与现有表匹配的临时表。我有数十个需要修改的表,我不想手动创建临时表。 - Ichorus
1
而键呢?索引?外键? - Helder Gurgel
这并不会创建整个模式,只是表和字段。这是创建快速临时表的好方法。 - JoshBerke
“与您的选择子句中的每个列和数据类型匹配”的意思是:请注意,对于varchar / nvarchar,它不会从源表中获取长度,而是从查询结果中获取最大长度。如果源表中的某个列为nvarchar(2000),但该列的最长结果仅为10个字符,则将创建nvarchar(10)。 - DaFi4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接