gpt4 book ai didi

sql - 是否可以在触发器执行之前从SQL Server存储过程中获取输出结果集?

转载 作者:行者123 更新时间:2023-12-04 22:07:34 26 4
gpt4 key购买 nike

我有一个主表Din_Test_Procedure:

CREATE TABLE Din_Test_Procedure(Emp_ID INT);

而该表的审计表是:

CREATE TABLE Din_Test_Procedure_Audit(Emp_ID INT,LoopingValue BIGINT);

然后我为表写了一个触发器,当 INSERT 发生时,100 万条记录插入到审计表中:

CREATE TRIGGER TrgAfterInsert_SPTest 
ON [dbo].[Din_Test_Procedure]
FOR INSERT
AS
DECLARE @CurID INT, @MIN INT = 1, @MAX INT = 1000000

SELECT @CurID = i.Emp_ID
FROM inserted i;

WHILE @MIN <= @MAX
BEGIN
INSERT INTO Din_Test_Procedure_Audit
VALUES(@CurID, @MIN)

SET @MIN = @MIN + 1
END
GO

我还创建了一个带有 OUTPUT 参数的存储过程,用于将记录插入主表。

CREATE PROCEDURE Din_Insert_SPTest 
@ID INT, @ErrCode INT OUTPUT
AS
BEGIN
INSERT INTO Din_Test_Procedure
SELECT @ID

SELECT @ErrCode = 0
END

当我执行该过程时,它会在触发器执行完成后显示 OUTPUT。给出输出需要一些时间延迟。

DECLARE @ErrCode INT
EXEC Din_Insert_SPTest 1,@ErrCode OUTPUT
SELECT @ErrCode

是否可以在主表插入完成后获取输出,即在触发过程完成之前获取输出。

最佳答案

没有。
只有在触发器完成运行后,SQL Server 才会将控制权返回给存储过程。
这意味着 SELECT @ErrCode = 0 只会在触发器执行后 发生,当然,您只能在之后从存储过程中取回结果 运行完成。

原因是触发它的触发器和语句是在隐式事务中执行的。有关详细信息,请参阅 Microsoft 的 DML Triggers文档

关于sql - 是否可以在触发器执行之前从SQL Server存储过程中获取输出结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48201266/

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