【问题标题】:Copying table constraints from select * into将表约束从 select * 复制到
【发布时间】:2014-09-22 10:42:25
【问题描述】:

select * into B from A 是否也将 A 的约束复制到 B 上?如果没有,那我该如何复制约束?

【问题讨论】:

  • 你试过运行它吗?
  • 是的,我试过了,它没有复制任何约束,所以我想我一定是遗漏了什么。

标签: sql sql-server select constraints select-into


【解决方案1】:

不,不在 SQL-Server 中。您需要手动指定新表上的约束和索引。如果您使用的是 SSMS,则使用 Script As... Create To 功能可以获得一个示例脚本来创建具有相同约束和结构的新表。

https://docs.microsoft.com/en-us/sql/t-sql/queries/select-into-clause-transact-sql?view=sql-server-ver15

源表中定义的索引、约束和触发器不会转移到新表中,也不能在 SELECT...INTO 语句中指定。如果需要这些对象,您可以在执行 SELECT...INTO 语句后创建它们。

【讨论】:

  • 谢谢@Chris。当您说“不,不在 SQL Server 中”时,您的意思是它发生在其他数据库中吗?如果是,是哪些?
  • MySQL 的CREATE TABLE x LIKE y 复制结构和主键,但不复制约束。较新的 Postgres 版本可以使用 create table x ( like y INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES ); 复制所有内容。
  • 最近的 MS SQL 迭代中是否有任何变化?根据 OP,现在可以使用 T-SQL 吗?我问这个问题和答案有点老了,我希望 SQL-Server 已经加强并添加了功能来完成SELECT * INTO my_tbl_tmp FROM my_tbl 并包括 PK/FK/constraints/etc...
  • @Rockin4Life33 我刚刚重新检查了文档(并添加了指向答案的链接),不,仍然没有使用SELECT... INTO 自动传输任何索引、约束和触发器的情况@声明。
【解决方案2】:

它不会复制约束。如果您希望使用相同的约束设置两个表,则必须通过运行 create table/constraint 语句手动完成。不过,您可以让 sql server 从现有表中创建 sql 语句。使用 Sql Server Studio,在对象资源管理器中右键单击表并选择 Script As 并选择所需的选项,然后根据需要更改表名。

【讨论】:

    【解决方案3】:

    你不能直接将约束从一个表复制到另一个表,首先你应该复制带有索引和约束的表结构,这样做

    请按照以下说明进行操作:

    1. 在 SSMS 中右键单击表,脚本创建。

    2. 将生成脚本中的名称改为NewTable

    insert into NewTable select * from OldTable -- 请注意,如果 Old 足够大,它可能会很慢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多