【发布时间】:2020-12-10 22:59:36
【问题描述】:
SqlDataAdapter 没有用一行填充数据表,我有一个模糊的问题。这仅在生产版本上失败。
它适用于
- 开发者机器上的调试模式
- 开发者机器上的发布模式
我们最近在所有表上添加了一些审核日志记录,并且有 2 个触发器在运行。 1 在表本身上将行副本作为 JSON 推送到我们的审计日志表。然后是 AuditLog 表本身的第二个触发器,如下所示:
CREATE or ALTER TRIGGER [dbo].[trg_AuditLog_Insert] ON [dbo].[AuditLog] AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Qry varchar(255)
SELECT
@Qry = event_info
FROM sys.dm_exec_sessions AS es
CROSS APPLY sys.dm_exec_input_buffer(es.session_id, NULL) AS ib
WHERE es.session_id = @@SPID
UPDATE AuditLog
SET
[CallerProc] = @Qry
FROM
AuditLog al
INNER JOIN inserted i on i.AuditLogID=al.AuditLogID
END
基本上它只是更新 AuditLog 表并告诉我们运行了哪个 SP 导致任何审计表的更新。
如果我们禁用此触发器,则 SQLDataAdapater.Fill 方法将按预期开始工作。基本上,Fill 方法中使用的 SQLCommand 是一个基本的存储过程,用于检查登录凭据。我添加了一些跟踪,一切似乎都正常。触发器工作正常,SQL 命令似乎工作正常,但数据表似乎没有填满(直到我们禁用触发器)。任何建议表示赞赏。
【问题讨论】:
-
..您是否检查了 sys.dm_exec_input_buffer() 权限中的重要说明? docs.microsoft.com/en-us/sql/relational-databases/…:
-
好的...我会调查一下。很可能是个问题吗?奇怪的是,虽然触发器仍然有效,但显然它对返回行有某种影响
-
谢谢...就是这样...需要应用正确的权限
标签: sql-server triggers ado.net