UPDATE语句失败,因为无法在具有非聚集列存储索引的表中更新数据

时间:2019-05-22 09:32:40

标签: sql-server columnstore

我有一个对表进行更新的SP。在那张桌子上,我有一个触发器。当我运行SP时,出现以下错误。

  

35330 TRG_TrackDateTime UPDATE语句失败,因为数据无法   在具有非聚集列存储索引的表中进行更新。   考虑在发布UPDATE之前禁用列存储索引   语句,然后在UPDATE之后重建列存储索引   完成。

代码:

ALTER TRIGGER [TRG__TrackDateTime]
ON  [Table]
AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @rowsUpdated int

    UPDATE Table
    SET TrackDateTime = GETDATE()
    FROM INSERTED i, table t
    WHERE i.ID = t.ID
    SET @rowsUpdated=@@ROWCOUNT

    IF @rowsUpdated=0 BEGIN
        INSERT INTO Table
        SELECT TrackDateTime
        FROM INSERTED
    END
END

如何在触发器中禁用和启用索引?

1 个答案:

答案 0 :(得分:0)

您可以简单地删除并创建一个列存储索引。假设您的表名称为“ TABLE1”:

IF EXISTS (SELECT * FROM sys.indexes WHERE name = 'CSIDX_TABLE1')
BEGIN
    DROP INDEX [CSIDX_TABLE1] ON [dbo].[TABLE1];
END

/* Your UPDATE here */

CREATE NONCLUSTERED COLUMNSTORE INDEX CSIDX_TABLE1 ON [dbo].[TABLE1]
( 
    Column1,Column2
)