gpt4 book ai didi

sql - 从 INSTEAD OF TRIGGER 获取 ROWCOUNT

转载 作者:行者123 更新时间:2023-12-02 20:29:58 25 4
gpt4 key购买 nike

旧应用程序使用替代触发器在表上执行 INSERT,然后使用行计数进行进一步处理。

我们现在需要使用 INSTEAD OF INSERT 触发器来选择退出某些 INSERT。

问题在于 @@ROWCOUNT 仍然返回尝试插入的数量。

例如,永远不会完成插入的虚构触发器可能是

ALTER TRIGGER [dbo].[trig_ACCOUNT_CREDITS_RunningTotalINSERT]
ON [dbo].[ACCOUNT_CREDITS]
INSTEAD OF INSERT
AS
BEGIN
--tried with NOCOUNT ON and OFF
SET NOCOUNT OFF;

--This is an example of the branching logic that might determine
--whether or not to do the INSERT
IF 1=2 --no insert will ever occur (example only)
BEGIN
INSERT INTO dbo.ACCOUNT_CREDITS (COL1, COL2)
SELECT COL1, COL2 from INSERTED
END
END

一些 INSERT 语句可能是

--No rows will be inserted because value of COL1 < 5
INSERT INTO dbo.ACCOUNT_CREDITS (COL1, COL2) VALUES ( 3, 3)

--We would assume row count to be 0, but returns 1
select @@ROWCOUNT

--No rows will be inserted because value of COL1 < 5
INSERT INTO dbo.ACCOUNT_CREDITS (COL1, COL2)
SELECT 1, 1
union all
SELECT 2, 2

--We would assume row count to be 0, but returns 2
select @@ROWCOUNT

我可以解决这个问题,但令我困扰的是我不能信任@@ROWCOUNT。我在 SO 或那些其他知识库中找不到任何关于此问题的引用。这只是触发是邪恶的情况吗?

我可以影响@@ROWCOUNT吗?

最佳答案

某些语句可能会更改触发器内的@@ROWCOUNT。

声明

SELECT * FROM INSERTED WHERE COL1 < 5

执行并将@@ROWCOUNT设置为1

Put 语句

SET NOCOUNT ON;

然后

IF NOT EXISTS (SELECT * FROM INSERTED WHERE COL1 < 5)
BEGIN
SET NOCOUNT OFF;

INSERT INTO dbo.ACCOUNT_CREDITS (COL1, COL2)
SELECT COL1, COL2 from INSERTED
END

关于sql - 从 INSTEAD OF TRIGGER 获取 ROWCOUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4289147/

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