SQL Server 删除脚本顺序

标签 sql sql-server sql-server-2012

我的表有以下关系

enter image description here

如您所见,FirstEntity 可以有多个 Transactions 相关记录。 Transaction 分为两个表,因为它代表继承层次结构( Entity Framework 中的每个类型表)。

我需要创建一个脚本,在给定 FirstEntityID 的情况下,删除 FirstEntityTransactionTransaction 中的所有记录。然后删除应遵循以下顺序:

  • 删除 FirstEntityTransaction 中的所有记录
  • 删除交易中的所有记录
  • FirstEntity删除记录

问题是,当我执行第一次删除(FirstEntityTransaction)时,我没有任何方法可以通过 TransactionID 查找相关事务。有什么方法可以保存这些 ID,然后执行第二次删除吗?

编辑:我修改了帖子以获得更有意义的图表

最佳答案

下面的示例将已删除的实体事务插入到表变量中,该变量随后用于删除事务行。

DECLARE @DeletedMyEntityTransaction table ( TransactionID int );

DELETE  dbo.MyEntityTransaction
OUTPUT  deleted.TransactionID
        INTO @DeletedMyEntityTransaction
WHERE   MyEntityID = @MyEntityID;

DELETE  dbo.[Transaction]
WHERE   TransactionID IN ( SELECT   TransactionID
                           FROM     @DeletedMyEntityTransaction );

DELETE  dbo.MyEntity
WHERE   MyEntityID = @MyEntityID;

关于SQL Server 删除脚本顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30820162/

相关文章:

SQL Server 2012 - 积压和结转的运行总计

sql-server - 在 SQL Server 中将行转换为 XML 格式

python - 如何在Django中查看为测试模型创建的SQL?

sql - 如何更新现有记录

sql - 如何在没有 DB2 服务器的情况下导出 DB2 数据库

sql-server - 在 varchar 类型的列上创建非聚集索引好吗?

sql - 获取给定日期之间的所有日期

python - 如何从他的 ManyToMany 关系中选择包含某些 child 的 parent ?

c# - 使用 ObjectContext 从存储过程中检索多个结果集

sql-server - 从 SQL Server 2012 中的年、周数、日名称检索日期