【发布时间】:2021-11-15 23:05:15
【问题描述】:
有没有办法使用Firedac 来处理条件场景。
主表有一个名为 INVOICESCOUNT 的列。
成功删除发票后,INVOICESCOUNT 会减少。
例如,这样的 SQL 伪代码语句:
Delete From Invoices where INVOICE=500;
Update Customers SET INVOICECOUNT=INVOICECOUNT-1 WHERE Customer=1 (if prior statement returns 1 affected row);
在第一个 FDQuery 返回成功执行后,我需要将它嵌入到同一个 SQL 语句中,而不是让 Delphi 源代码处理分别执行 2 个语句。
感谢您的建议。
【问题讨论】:
-
单独执行语句有什么问题?如果您想避免使它们保持同步的问题,请将语句放在事务中,甚至是存储过程中。
-
代码将在服务器上......所以它会是随时进入的一大块事务。最终将在 AWS 或 Azure 托管的 mysql 服务上托管它,所以我认为发送 10 个 SQL 语句(5 组 2 个 sql 行)会更有效,而不是执行 10 个 SQL 查询来更新 5 个发票删除(从 5 个不同的客户)。
-
Customer字段是否存在于Invoices表中?如果是这样,那么您是否考虑过在Invoices表上使用DELETE TRIGGER?每当从Invoices中删除记录时,触发器可以提取Old记录的Customer,然后相应地提取UPDATECustomers表。这样一来,您的代码就不必手动UPDATECustomers表,只需DELETEInvoices记录,UPDATE将自动完成。 -
@RemyLebeau 感谢您的建议。唯一的客户字段是 Invoices 表中的 CustomerID。哦,注意了,我可以使用
TRIGGER进行删除,但我也有一些情况,即对发票字段的某些字段进行编辑,也需要更新客户表。 -
触发器也适用于插入和更新。您可以访问旧记录和新记录,因此您可以根据需要检查特定字段的更改并采取相应措施