gpt4 book ai didi

sql-server - 为什么在Insert触发器中使用 "IF @@ROWCOUNT = 0 RETURN"?

转载 作者:行者123 更新时间:2023-12-04 16:33:58 26 4
gpt4 key购买 nike

我的 table 上有一个触发器。

CREATE TRIGGER HIE.AI_IB_Export_Events 
ON HIE.IB_Export_Events
INSTEAD OF INSERT

及其后面的行是:

IF @@ROWCOUNT = 0 RETURN

这不是必需的吗?如果没有插入行,如何获得插入触发器?

为什么我们要对插入件执行此类检查?我可以理解更新查询的相同情况,其中没有记录与条件条件匹配。

如果@@ROWCOUNT = 0 时出现这种情况,那么在什么情况下会发生这种情况?

提前致谢。

最佳答案

为了回答即使插入 0 行,插入触发器是否也会触发,我创建了一个简单的表和触发器:

CREATE TABLE Test (Id INT PRIMARY KEY)
GO

CREATE TRIGGER Test_Trigger ON Test INSTEAD OF INSERT
AS
BEGIN
DECLARE @Msg nvarchar(4000);
SELECT @Msg = CONVERT(NVARCHAR, @@ROWCOUNT) + N' rows inserted (trigger).';
PRINT @Msg;
END
GO

如果您随后运行 void insert 语句,您仍然会看到一条消息:

INSERT INTO Test
SELECT 1 WHERE 0 = 1

>> 0 rows inserted (trigger).

请注意,INSTEAD OF INSERTAFTER INSERT 触发器都会发生这种情况。这种行为是有道理的,因为插入 0 行仍然是一个插入操作(尽管不是很令人兴奋)。

如果插入的行数为 0,您是否应该检查并提前返回?我想说这取决于触发器的功能和对插入行的期望(例如,它会发生吗?如果会发生,后果是什么?)。

如果您的触发器只是执行插入行的映射,然后执行另一次插入,则检查并不重要。但是,如果您的触发器正在触发某些业务逻辑或执行某些复杂的操作来准备插入的行,则检查可能有意义。

关于sql-server - 为什么在Insert触发器中使用 "IF @@ROWCOUNT = 0 RETURN"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29060804/

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