sql - 如何使用 "ON DELETE CASCADE"选项检查外部列是否是约束的一部分?

标签 sql sql-server

从数据库中删除行时,我正在执行查询以避免违反约束。我尽可能使用 ON DELETE CASCADE选项,但有时我不想允许执行删除。

例如:

案件:

  • 我有一个列 ID
  • 的 DEPT 表
  • 我有一个 CUSTOMER 表,其中一列 DEPTID 引用了 DEPT 表
    没有任何 ON DELETE CASCADE 选项。
  • 我有一个 AREA 表,其中有一列 DEPTID 引用了 DEPT 表
    ON DELETE CASCADE 选项。

  • 下面的查询将列出引用 DEPT 表的两个表(CUSTOMER 和 AREA):

    SELECT *
    FROM sys.foreign_key_columns fkc
    JOIN sys.columns col ON
         fkc.parent_object_id = col.object_id 
         AND fkc.parent_column_id = col.column_id
    WHERE object_name(referenced_object_id) = 'DEPT'
    

    但是我只想在我的查询中显示具有外键的表 没有 ON DELETE CASCADE选项,在上面的例子中只是表 CUSTOMER。

    有任何想法吗?

    最佳答案

    select ao.name,ao.type_desc,delete_referential_action_desc,*
    from sys.foreign_keys fk 
    inner join sys.all_objects ao 
    on fk.parent_object_id = ao.object_id     
    where delete_referential_action_desc <> 'CASCADE'
    

    关于sql - 如何使用 "ON DELETE CASCADE"选项检查外部列是否是约束的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382645/

    相关文章:

    mysql - sql删除 double 值

    java - 有没有办法以可配置的方式将字段视为@Transient?

    c# - 获取最后一次购买以及价格

    php - 需要有关构建具有 MySQL 和 MSSQL 双连接的 php 框架的建议

    涉及join的MySQL select语句

    sql - 大表的自定义排序和分页

    sql - 从未提交读取恢复数据库事务级别的正确方法

    c# - 无法在对象 'dbo.Account' 中插入重复键。重复键值为 (2)

    sql-server - 将 SqlServer(2008) 命名实例迁移到模式

    mysql - 使用 UNION 对子查询进行 INNER JOIN