3

给定一个 Payment 表、一个 PaymentStatus 表和一个 PaymentHistory 表,我需要从 PaymentStatus 表中删除 Payment 和 PaymentHistory 表具有关联记录的状态。所以自然这意味着删除支付表之前的历史表。当然,历史数据有多个不同状态的支付记录。我需要的是历史表删除的 where 子句...... sql 看起来像这样:

DELETE FROM PaymentHistory 
WHERE PaymentId IN 
(SELECT Id FROM Payment WHERE PaymentStatusCode = 'Processing')

我不明白的是如何在 FluentMigrator 中实现这一点。这是我到目前为止所拥有的,但是在 .FromTable() 之后没有 .Where() 或其他可用的扩展方法

Delete.FromTable("PaymentHistory").Row(new {PaymentStatusCode = "Processing"});

在此先感谢您的帮助。

4

2 回答 2

7

现在我觉得问起来很愚蠢......

const string cascadeDeleteScript = 
@"DELETE FROM PaymentHistory WHERE PaymentId IN 
              (SELECT Id FROM Payment WHERE PaymentStatusCode = 'Processing') ";
Execute.Sql(cascadeDeleteScript);
于 2014-06-17T18:37:25.633 回答
0

将表设置为级联删除怎么样?

如何在 ALTER TABLE 语句中添加“ON DELETE CASCADE”

似乎您必须删除主外键约束并在考虑级联的情况下重新创建它,但是任何时候您从 Payment 中删除时,您也会从 PaymentHistory 中删除。

于 2016-10-04T14:43:33.117 回答