Оператор UPDATE не выполнен, поскольку данные нельзя обновить в таблице с некластеризованным индексом columnstore - PullRequest
0 голосов
/ 22 мая 2019

У меня есть SP, который обновляет таблицу. На этом столе у ​​меня есть триггер. Когда я запускаю SP, я получаю следующую ошибку.

35330 TRG_TrackDateTime Оператор UPDATE не выполнен, так как данные не могут обновляться в таблице, имеющей некластеризованный индекс columnstore. Рассмотрите возможность отключения индекса columnstore перед выпуском UPDATE. оператора, а затем перестраивает индекс columnstore после того, как 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 голосов
/ 22 мая 2019

Вы можете просто удалить и создать индекс columnstore. Предполагая, что ваше имя таблицы - «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
)
...