【问题标题】:Run update statement on inserted rows only through a trigger仅通过触发器对插入的行运行更新语句
【发布时间】:2021-03-05 15:38:44
【问题描述】:

当添加到发票表[InvoiceTable] 时,我创建了一个触发器来更新发票记录上的自定义日期[Invoice.ContractStartDate]

下面的触发器有效,但我希望它只为 插入的记录运行,并避免对 DateTimeCreated 使用 WHERE 子句。

对于Contract.Days <> ' ',我仍然需要WHERE 子句

这可以使用AFTER INSERTINSTEAD OF INSERT 吗?

 CREATE TRIGGER UpdateContractStartDate ON InvoiceTable 
 FOR INSERT AS
 UPDATE InvoiceTable
 SET InvoiceTable.ContractStartDate = InvoiceTable.InvoiceDate + Contract.Days
 FROM Contract
 INNER JOIN InvoiceTable
     ON InvoiceTable.ContractID = Contract.ContractID
 WHERE (CAST(InvoiceTable.DateTimeCreated AS DATE) = CAST(GETDATE() AS DATE))
 AND (Contract.Days <> '')

【问题讨论】:

  • 请标记您的关系型数据库

标签: sql triggers insert


【解决方案1】:

您没有提供有关表架构的任何信息,但假设您有一个唯一的键“Id”

典型的语法是

Update it set
  it.ContractStartDate = it.InvoiceDate + c.Days
from inserted i
join InvoiceTable it on it.Id=i.Id
join Contract c on c.ContactId=it.ContractId and c.Days <> ''

【讨论】:

  • 非常有用,非常感谢
猜你喜欢
  • 1970-01-01
  • 2021-05-07
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
相关资源
最近更新 更多