我正在使用 SQL 2012 运行合并复制。
在 SQL 2012 中为复制添加的删除触发器似乎会带来令人讨厌的后果。
在删除触发器内部是这样的,
select @xe_message = CAST('replica_id: ' + convert(nvarchar(100), @replnick) + ', article_id: ' + convert(nvarchar(100), @tablenick) + ', rowguid: ' + case when @article_rows_deleted = 1 then convert(nvarchar(100), @rowguid) else N'0' end + ', generation: ' + case when @is_mergeagent = 1 then N'0' else convert(nvarchar(100), @newgen) end + ', Reason: -1' AS varbinary(1000));
exec master..sp_repl_generateevent 1, N'Event : ppm_insert', @xe_message
如果某人不在 sysadmin 角色中,则在执行删除操作时会发生错误,
Msg 8189, Level 14, State 10, Procedure sp_repl_generateevent, Line 1
You do not have permission to run 'SP_TRACE_GENERATEEVENT'.
那么你是在告诉我,如果我的数据库的每个用户要进行删除,他们都必须具有系统管理员访问权限吗?
这似乎是错误的。有没有办法关闭此跟踪或删除此要求的替代方法?
不,根据BOL 关于 sp_trace_generateevent 的文档:
这是一个已知错误(仅存在于 SQL 2012 中),Microsoft 目前正在解决该错误。解决方法是在解决之前授予用户
ALTER TRACE
权限。您可以在Connect上跟踪状态。
此问题已在 SQL Server 2012 SP2 CU12中得到解决 ( KB3155209 )