繁体   English   中英

在具有聚集列存储索引的表上创建触发器 - 错误

[英]Create Trigger on a table with clustered columnstore index - Error

我正在尝试在具有列存储聚集索引的表上创建触发器。 每当有人更新时,它就会将记录记录在审计模式表中。 当我执行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 

如果您确实需要触发器,则必须使表成为聚集索引或堆。 然后可以添加非聚集列存储索引,但行数据将被存储两次。

你应该能够

  1. 将您的表重命名为
  2. 创建一个除了简单的 SELECT <all_columns> FROM 之外什么都不做的视图,并且具有原始表名(因此您不必更改代码)。 不要使用 SELECT *,这可能会导致以后添加/删除/更改表列时出现奇怪且难以发现的问题。
  3. 在此 VIEW (!) 上创建一个 INSTEAD OF 触发器,该触发器执行您的审计工作并将 UPDATE / DELETE “委托”到重命名的表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM