我有一个对表进行更新的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
如何在触发器中禁用和启用索引?
答案 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
)