运行 仅通过触发器对插入的行更新语句
Run update statement on inserted rows only through a trigger
我创建了一个触发器,用于在添加到发票 Table [InvoiceTable]
.
时更新发票记录上的自定义日期 [Invoice.ContractStartDate]
下面的触发器有效,但我希望 运行 仅用于 插入的记录 并避免对 DateTimeCreated 使用 WHERE 子句。
我仍然需要 WHERE
子句 Contract.Days <> ' '
使用 AFTER INSERT
或 INSTEAD 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 <> '')
您没有提供关于您的 table 架构的任何信息,但假设您有一个唯一的键“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 <> ''
我创建了一个触发器,用于在添加到发票 Table [InvoiceTable]
.
[Invoice.ContractStartDate]
下面的触发器有效,但我希望 运行 仅用于 插入的记录 并避免对 DateTimeCreated 使用 WHERE 子句。
我仍然需要 WHERE
子句 Contract.Days <> ' '
使用 AFTER INSERT
或 INSTEAD 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 <> '')
您没有提供关于您的 table 架构的任何信息,但假设您有一个唯一的键“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 <> ''