當我運行下面的僞代碼:ALTER INDEX語句被忽略?
BEGIN TRANSACTION @TName
BEGIN TRY
-- Disable columnstore index
ALTER INDEX CSIX_MyTable ON dbo.MyTable DISABLE;
MERGE INTO dbo.MyTable
...
我得到這個錯誤:
MERGE statement failed because data cannot be updated in a table with a columnstore index. Consider disabling the columnstore index before issuing the MERGE statement, then rebuilding the columnstore index after MERGE is complete.
我不明白的是,我清楚地禁用索引我執行MERGE
之前。我有雙重,三重和四重檢查,我禁用了正確的索引。事實上,如果我自己執行ALTER INDEX
語句,然後再次運行上述塊,那麼MERGE
就完成了。任何想法,爲什麼會發生這種情況或我可以如何解決它?
編輯:
我也有下面的僞代碼,如果沒有問題,執行:
BEGIN TRANSACTION @TName
BEGIN TRY
-- Disable columnstore index
ALTER INDEX CSIX_MyTable2 ON dbo.MyTable2 DISABLE;
INSERT INTO #MyTempTable(Columns...)
SELECT Columns...
FROM (
MERGE INTO dbo.MyTable
...
OUTPUT ...
) A
...
該指數被禁用,而在MERGE
過程順利。看來出於某種原因,包裝INSERT
聲明似乎「欺騙」編譯器執行代碼。
我確信將ALTER INDEX
語句轉移到另一個任務將解決問題,但我希望這個問題是試圖發現代碼不運行的原因。
您確定這是columnstore索引嗎? – Paparazzi
@Blam絕對確定。 – Kittoes0124
對不起,不知道你的問題的直接答案,但我建議你考慮使用this article中描述的「表格分區」方法。如果這對你有效,問題就不存在了。 –