【发布时间】:2014-09-22 10:42:25
【问题描述】:
select * into B from A 是否也将 A 的约束复制到 B 上?如果没有,那我该如何复制约束?
【问题讨论】:
-
你试过运行它吗?
-
是的,我试过了,它没有复制任何约束,所以我想我一定是遗漏了什么。
标签: sql sql-server select constraints select-into
select * into B from A 是否也将 A 的约束复制到 B 上?如果没有,那我该如何复制约束?
【问题讨论】:
标签: sql sql-server select constraints select-into
不,不在 SQL-Server 中。您需要手动指定新表上的约束和索引。如果您使用的是 SSMS,则使用 Script As... Create To 功能可以获得一个示例脚本来创建具有相同约束和结构的新表。
源表中定义的索引、约束和触发器不会转移到新表中,也不能在 SELECT...INTO 语句中指定。如果需要这些对象,您可以在执行 SELECT...INTO 语句后创建它们。
【讨论】:
CREATE TABLE x LIKE y 复制结构和主键,但不复制约束。较新的 Postgres 版本可以使用 create table x ( like y INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES ); 复制所有内容。
SELECT * INTO my_tbl_tmp FROM my_tbl 并包括 PK/FK/constraints/etc...
SELECT... INTO 自动传输任何索引、约束和触发器的情况@声明。
它不会复制约束。如果您希望使用相同的约束设置两个表,则必须通过运行 create table/constraint 语句手动完成。不过,您可以让 sql server 从现有表中创建 sql 语句。使用 Sql Server Studio,在对象资源管理器中右键单击表并选择 Script As 并选择所需的选项,然后根据需要更改表名。
【讨论】:
你不能直接将约束从一个表复制到另一个表,首先你应该复制带有索引和约束的表结构,这样做
请按照以下说明进行操作:
在 SSMS 中右键单击表,脚本创建。
将生成脚本中的名称改为NewTable
insert into NewTable select * from OldTable -- 请注意,如果 Old 足够大,它可能会很慢。
【讨论】: