gpt4 book ai didi

sql - 检查字段值是否在 sql server 触发器上更新

转载 作者:行者123 更新时间:2023-12-02 01:06:15 25 4
gpt4 key购买 nike

我如何检查在此触发器中更新的字段值:

ALTER TRIGGER dbo.OrderApprovedSms 
ON dbo.[Order]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;

/*How can check approve date is updated*/
IF (/*ApproveDate is updated*/)
BEGIN
INSERT INTO office.SmsSendBuffer
( Number ,
Body
)
SELECT 'xxxxxx','ORDER APPROVED!'
END

END

最佳答案

它会是这样的:

ALTER TRIGGER dbo.OrderApprovedSms 
ON dbo.[Order]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;

INSERT INTO office.SmsSendBuffer
( Number ,
Body
)
SELECT 'xxxxxx','ORDER APPROVED!' --No columns from inserted or deleted?
FROM inserted i INNER JOIN deleted d
ON i.<primary key column 1> = d.<primary key column 1> AND
i.<primary key column 2> = d.<primary key column 2> AND
i.ApprovedDate != d.ApprovedDate --Not sure what actual check you wanted to perform
END

在哪里deleted and inserted是包含 UPDATE 语句影响的行的伪表(对应于语句前后的状态)

有一个函数,叫做UPDATE它回答了“此列是否在此 UPDATE 语句期间进行更新?”的问题。但它 a) 仅回答 inserteddeleted 中的整个 set 行和 b) 不允许您区分没有更新的更新实际效果(例如,如果您执行 SET Column=2,其中 Column 已经是 2,它仍然会回答 Column 已更新)


作为我认为 UPDATE 函数多么毫无意义的例子,请考虑以下内容:

create table T (ID int not null,Col1 int not null)
go
create trigger TT on T after update
as
IF UPDATE(Col1)
BEGIN
RAISERROR('Hello',10,1) WITH NOWAIT
END
go
update T set Col1 = Col1

在输出中打印 Hello - 所以,我们有一个 UPDATE 影响了 0 行(因为表是新的)甚至如果有任何行,则不会更改任何数据。

关于sql - 检查字段值是否在 sql server 触发器上更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22304192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com