【问题标题】:Oracle drop constraint cascade equivalent in Sql ServerSql Server 中的 Oracle 删除约束级联等效项
【发布时间】:2015-01-01 20:13:18
【问题描述】:

在 Oracle 中,要删除约束 PK_SAI 我使用以下语法:

ALTER TABLE "SAISIE" 
    DROP CONSTRAINT "PK_SAI" CASCADE;

在 SQL Server 中这个等价物是什么?

【问题讨论】:

  • “CASCADE”在Oracle中做了什么?
  • 删除父表的行时,会删除子表中对应的行,所以没有孤儿数据
  • 好吧,在SQL中删除父行的时候也是这样,但是在Oracle中DROP CONSTRAINT是怎么回事?
  • cascade 选项用于 drop constraint 不会删除 Oracle 中的任何行。只需删除引用您要删除的 PK 的任何外键。但在 SQL Server 中没有等价物。您必须先手动删除所有外键,然后才能删除主键。
  • 为什么需要知道sql server中的等价方法(如果存在的话)。你能告诉我们你遇到的问题和你想要做什么吗?

标签: sql-server oracle sql-server-2008 cascade


【解决方案1】:

您正在考虑与实际 DELETE 语句相关的 FOREIGN KEY 约束的 CASCADE 功能。

ALTER TABLE t2 add constraint FK_T2 foreign key(t_id) references t(id)
   ON DELETE CASCADE;

使用 CASCADE 删除约束不会删除任何行。

DELETE 删除行,如果您启用了 ON DELETE CASCADE。

删除约束只会删除约束(以及相关的索引和依赖约束),而不是数据行。在 SQL Server ALTER TABLE ... 中,我不知道在 Oracle 中有一个“CASCADE”选项。

来自 Oracle 文档 http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_3001.htm#i2103845 的 ALTER TABLE 语句:

CASCADE 如果您希望所有其他依赖于已删除完整性约束的完整性约束也被删除,请指定 CASCADE。

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 2019-12-24
    • 2011-01-15
    • 1970-01-01
    • 2011-02-24
    • 2014-01-17
    • 1970-01-01
    • 2012-05-08
    相关资源
    最近更新 更多