我试图在一个表上创建一个触发器,该表有一个columnstore聚集索引。每当有人更新时,它都会将记录记录记录在audit schema表中。当我执行 Create Trigger
sql,获取此错误
对表“dbo.report”创建触发器失败,因为无法对具有聚集列存储索引的表创建触发器。考虑以其他方式强制触发器的逻辑,或者如果必须使用触发器,则使用堆或b树索引。
任何帮助都将不胜感激。
CREATE TRIGGER trg_report
ON dbo.[Report]
after UPDATE, DELETE
AS
BEGIN
INSERT INTO [Audit].[Report]
(userid,
department,
modifydate)
SELECT [UserId] = CURRENT_USER,
D.* FROM deleted D
WHERE CURRENT_USER NOT IN (SELECT accountname
FROM
dbo.[account])
END
2条答案
按热度按时间ma8fv8wu1#
如果您真的需要触发器,就必须使表成为聚集索引或堆。然后可以添加非聚集列存储索引,但行数据将存储两次。
myss37ts2#
你应该能够
将表重命名为
创建一个视图,该视图除了简单的select<all\u columns>之外什么都不做,并且具有原始的表名(这样就不必更改代码)。不要使用select*,这可能会导致以后添加/删除/更改表列时出现奇怪和难以发现的问题。
在此视图上创建一个instead of触发器(!)你的审计工作和“委托”更新/删除重命名的表