自引用外键约束和删除

2023-11-22

在 SQL-Server 中处理自引用外键约束的推荐方法是什么?

桌子型号:

enter image description here

fiData引用 tabData 中的先前记录。如果我删除引用的记录fiData,数据库抛出异常:

“DELETE 语句与 SAME TABLE REFERENCE 冲突 约束“FK_tabDataPrev_tabDataNext”。冲突发生在 数据库“MyDataBase”,表“dbo.tabData”,列“fiData””

if Enforce Foreignkey Constraint设置为“是”。

我不需要级联删除引用的记录,但我需要设置fiData=NULL它被引用的地方。我的想法是设置Enforce Foreignkey Constraint为“否”并创建删除触发器。这是值得推荐的还是有更好的方法?

谢谢。


与 Andomar 不同,我很乐意使用触发器 - 但我不会删除约束检查。如果您将其实现为instead of触发器,您可以在执行实际删除之前将其他行重置为空:

CREATE TRIGGER T_tabData_D
on tabData
instead of delete
as
    set nocount on
    update tabData set fiData = null where fiData in (select idData from deleted)
    delete from tabData where idData in (select idData from deleted)

它很短,很简洁,如果 SQL Server 可以处理到同一个表的外键级联(在其他 RDBMS 中,您可能可以只指定ON DELETE SET NULL对于外键约束,YMMV)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自引用外键约束和删除 的相关文章

随机推荐

  • 如何提取 SVN 转储?

    我收到了一个 SVN 转储文件 其中包含很多页面 所有 HTML 页面 以及所有服务器端代码 我想将它们分开 但不知道如何做到这一点 我在 Windows 上 根本没有 SVN 亚当 巴特勒的答案几乎是完美的 但我遇到了一些问题 所以这是我
  • 应用程序在到达 main.m 之前在模拟器 5.0 上崩溃 [重复]

    这个问题在这里已经有答案了 可能的重复 iOS 应用程序在使用 Xcode 4 2 和 iOS 5 进入 main 之前崩溃 我正在开发一个在模拟器 4 3 上运行良好的应用程序 但是当我在模拟器 5 0 上尝试它时 它甚至在到达 main
  • Java8 文件流,如何控制文件的关闭?

    假设我有一个Java8Stream
  • 从句子中提取“有用”信息?

    我目前正在尝试理解这种形式的句子 The problem was more with the set top box than the television Restarting the set top box solved the pro
  • null 是一个对象吗?

    为空Object在Java中 如果 null 是一个对象 它将支持以下方法java lang Object例如equals 然而 情况并非如此 对 null 的任何方法调用都会导致NullPointerException 这就是Java语言
  • 将字节数组转换为 int 的更快方法

    有没有比更快的方法BitConverter ToInt32将字节数组转换为 int 值 我实际上尝试了几种不同的方法将四个字节转换为 int BitConverter ToInt32 new byte w x y z 0 BitConver
  • ffmpeg av libs 可以返回准确的 PTS 吗?

    我正在使用使用 IBBP GOP 序列的 mpeg 流 这 DTS PTS 前 4 个 AVPacket 返回的值如下 I 0 3 B 1 1 B 2 2 P 3 6 I 帧上的 PTS 看起来是合法的 但 B 帧上的 PTS 不可能是正确
  • Python错误:“NoneType”对象没有属性“find_all”

    我正在改编一个网络抓取程序 http danielfrg com blog 2013 04 01 nba scraping data disqus thread 将 ESPN 的棒球数据抓取到 CSV 中 但是 当我运行第二段代码来编写游戏
  • 带有符号链接的 mod_xsendfile

    我在 Rails 3 应用程序中使用 xsendfile 时遇到问题 我使用 capistrano 来管理部署 在每个版本中 都有一个指向共享 资产目录的符号链接 例如 var www site releases 1234 assets g
  • 部署应用程序引擎应用程序时如何处理敏感配置信息?

    示例 我有一个应用程序需要访问提供身份验证令牌的 API myApi MyApi token my private sensible token 我想避免在属于项目一部分的配置文件中包含该私有令牌 我想到的一个解决方案是在一个单独的代理应用
  • 当Java自动更新时更新Windows路径变量?

    这个问题询问如何在 Windows 中设置路径变量以包含 Java bin 目录 从而允许您在提示符下使用 javac 命令 针对此问题发布的解决方案指出您应该对最新 Java 安装的绝对路径进行硬编码 在这种情况下 它恰好是c progr
  • 如何在不同的包中使用两个同名的类? [复制]

    这个问题在这里已经有答案了 如何访问不同包中具有相同名称的两个类 foo bar myClass class and foo myClass class 所有这些都在同一个班级中 TestRunner Suite class SuiteTe
  • 使用 pgAdmin 进行远程 PostgreSQL 连接

    我正在尝试通过基于 Ubuntu 16 04 的服务器上运行的 PostgreSQL 建立远程连接 到目前为止 当我单击 pgAdmin 上的 保存 按钮时 它有点冻结 什么也不做 输入 manage py runserver My dro
  • 处理 BeautifulSoup CSS 选择器中的冒号

    输入 HTML div style display flex div class half style font size 6 width 33 apple div div class half style font size 6 text
  • iOS Swift,Enum CaseIterable 扩展

    我正在尝试为枚举编写一个扩展CaseIterable这样我就可以获得原始值的数组而不是案例 但我并不完全确定如何做到这一点 extension CaseIterable static var allValues String get ret
  • Parcelable 中的 Parcel 读/写操作时变量顺序是否重要?

    我有以下实现Parcelable class public class DemoModel implements Parcelable private String para1 private int para2 public DemoMo
  • 在 T-SQL 中使用环境变量

    如何在 T SQL 脚本中读取系统环境变量的值 这是在 SQL Server 2005 上运行 要 读取 T SQL 脚本中系统环境变量的值 您可以将 SQL Management Studio 设置为使用 sqlcmd 模式 然后你可以像
  • Shell脚本:如何删除目录中除文件中列出的文件之外的所有文件?

    我有一个目录 temp 包含许多文件和子目录 并且在某些目录中 可能还包含其他文件和子目录 另外 在目录 temp 它包含一个特殊的txt文件 名为kept txt 它列出了其中包含的一些直接文件和子目录 temp 现在我想删除下面的所有其
  • Rails 4 中的左外连接

    我有3个型号 class Student lt ActiveRecord Base has many student enrollments dependent destroy has many courses through studen
  • 自引用外键约束和删除

    在 SQL Server 中处理自引用外键约束的推荐方法是什么 桌子型号 fiData引用 tabData 中的先前记录 如果我删除引用的记录fiData 数据库抛出异常 DELETE 语句与 SAME TABLE REFERENCE 冲突