【问题标题】:What is the equivalent of 'CREATE TABLE ... LIKE ..." in SQL ServerSQL Server 中“CREATE TABLE ... LIKE ...”的等价物是什么
【发布时间】:2009-03-05 18:54:06
【问题描述】:

我正在使用 SQL Server(我是 SQL Server 菜鸟)并尝试更改表。我想CREATE TABLE LIKE 在删除键和约束以及 SQL Server 在更改原始表时似乎需要的所有其他 rigamorole 时安全地存储数据,但我无法找到与该命令匹配的...

【问题讨论】:

  • 我为此使用 Visual Studio SQL Server Explorer,它允许自动更新数据库结构。

标签: sql-server tsql alter


【解决方案1】:

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

这个怎么样

 SELECT *
 into test
 FROM myRealTable
 where 0=1

不会向新表中插入任何数据

【讨论】:

  • SELECT top 0 * into test FROM myRealTable,也会得到同样的结果
【解决方案2】:

你可以的

SELECT * INTO #MyTable_tmp FROM MyTable

然后修改您的 MyTable,并将您的数据复制回去。我见过的其他方法是创建一个名为 Mytable_Tmp(不是临时表)的新表,这将是您的新表。

然后复制您的数据以进行您需要的任何迁移。然后您将删除原始表并在 Mytable 上进行重命名。

或者您可以使用众多出色的工具之一来比较数据库并生成差异脚本或 VSTS DB 版(开发人员随附),您可以从项目文件到数据库执行差异脚本。

编辑

当您运行 SELECT * INTO #MyTable FROM MyTable 时,SQL Server 会创建一个名为 #MyTable 的新临时表,该表与您的 select 子句中的每个列和数据类型相匹配。在这种情况下,我们选择 *,因此它将匹配 MyTable。这只会创建不复制默认值、约束索引或其他任何内容的列。

【讨论】:

  • 我的问题不是如何将数据放入已经存在的临时表中。我更关心创建一个与现有表匹配的临时表。我有几十个表需要更改,我不想手动创建临时表。
  • 钥匙呢?指数?外键?
  • 这不会只创建表和字段的整个架构。这是创建快速临时表的好方法
  • " 匹配您的 select 子句中的每个列和数据类型":请注意,对于 varchar/nvarchar,它不采用源表中的长度,而是采用最大结果中的长度询问。如果源表中的一列是 nvarchar(2000),但该列的最长结果只有 10 个字符,它将创建为 nvarchar(10)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
相关资源
最近更新 更多