gpt4 book ai didi

sql-server - 执行更新操作时如何从触发器获取存储过程名称?

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

Possible Duplicate:
Is it possible for a trigger to find the name of the stored procedure that modified data?

我有一个带有触发器(更新时)的表。执行触发器时,我想知道更新相关表的存储过程的名称。

最佳答案

这并不总是 100% 可靠,有时它会捕获外部过程调用,即使该过程调用了内部过程。但您至少可以了解用户调用了什么导致他们进入触发器。

ALTER TRIGGER dbo.whatever
ON dbo.something
FOR UPDATE
AS
BEGIN
... other trigger logic

DECLARE @ExecStr varchar(50), @Qry nvarchar(255)

CREATE TABLE #inputbuffer
(
EventType nvarchar(30),
Parameters int,
EventInfo nvarchar(255)
)

SET @ExecStr = 'DBCC INPUTBUFFER(' + STR(@@SPID) + ')'

INSERT INTO #inputbuffer
EXEC (@ExecStr)

SET @Qry = (SELECT EventInfo FROM #inputbuffer)

SELECT @Qry AS 'Query that fired the trigger',
SYSTEM_USER as LoginName,
USER AS UserName,
CURRENT_TIMESTAMP AS CurrentTime

-- of course you can store this somewhere instead of select
END

从 Vyas K 处窃取:http://vyaskn.tripod.com/tracking_sql_statements_by_triggers.htm

您可能还想查看这个问题,其中有一个与使用 sys.dm_exec_query_stats 相关的答案 - 您可以使用 sys.dm_exec_sql_text 公开的对象 ID 追溯到过程名称,并且可以使用 GETDATE() 作为指导限制最近的调用对于“最近”。还有一个使用扩展事件来执行此操作的冗长示例。

Create Trigger to log SQL that affected table?

或者使用 CONTEXT_INFO 的这些(但这需要更改更新表的所有存储过程):

Find query that fired a trigger

Is it possible for a trigger to find the name of the stored procedure that modified data?

最后,您可以查看这些帖子以获取一些想法:

http://www.thecodepage.com/post/TIP-A-Call-Stack-in-SQL-Server.aspx

关于sql-server - 执行更新操作时如何从触发器获取存储过程名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14467961/

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