Проблема с переключением разделов

Ниже моя хранимая процедура

ALTER PROC MU_STG_LOAD AS

BEGIN

DECLARE @SQL VARCHAR(4000)
DECLARE @CREATE VARCHAR(4000)
DECLARE @ALTER VARCHAR(4000)
DECLARE @i INT = 1

WHILE @i <= 24
BEGIN


SET @SQL = 
'SELECT CLNT_ID, CLNT_NM,' + CAST(@i AS VARCHAR) + 'AS DT_ID,
CAST(VAL_' + CAST(@i AS VARCHAR) + ' AS DECIMAL(18,3)) AS TOT_QTY
FROM MU_DIM
WHERE CAST(VAL_'+ CAST(@i AS VARCHAR) + ' AS DECIMAL(18,3)) <> 0'

SET @CREATE = 
'CREATE TABLE MU_DIM_TMP
WITH (DISTRIBUTION=HASH(CLNT_ID),
    CLUSTERED COLUMNSTORE INDEX,
    PARTITION (DT_ID RANGE RIGHT FOR VALUES (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24)))
AS '

EXEC (@CREATE + @SQL)

INSERT INTO MU_DIM_UNPVT_LOAD (CLNT_ID, CLNT_NM, DT_ID, TOT_QTY)
SELECT CLNT_ID, CLNT_NM, DT_ID, TOT_QTY FROM MU_DIM_TMP

SET @ALTER = 
'ALTER TABLE MU_DIM_TMP SWITCH PARTITION ' + CAST(@i AS VARCHAR) + ' TO MU_DIM_UNPVT_LOAD PARTITION ' + CAST(@i AS VARCHAR)

EXEC(@ALTER)

IF OBJECT_ID('MU_DIM_TMP') IS NOT NULL
DROP TABLE MMC_AMG_MU_D_LOAD_TMP

SET @i = @i + 1
END

GRANT EXECUTE ON MMC_AMG_MU_XPT_STG TO PUBLIC

END

Таблица MU_DIM_UNPVT_LOAD имеет ту же структуру и раздел, что и временная таблица. Когда я выполняю эту процедуру, я получаю эту ошибку:

Сообщение 4904, уровень 16, состояние 1, строка 5, инструкция ALTER TABLE SWITCH не выполнена. Указанный раздел 2 целевой таблицы «DB_32f2002bc6bd44c6b4b90a1425296ffe.dbo.Table_b6dae0230e604f9195c4a93ca98ad3d1_E» должен быть пустым.

Таблица UNPVT загружается данными для двух идентификаторов, то есть 1 и 2, а затем происходит сбой. Я не уверен, в чем проблема. Пожалуйста посоветуй.

(Обратите внимание: я работаю в PDW)


person Triumph Spitfire    schedule 10.11.2014    source источник


Ответы (1)


Сначала переключите его с пустой таблицей, а затем переключитесь на заполненную таблицу. Не пытайтесь просто заменить существующий раздел полностью заполненной таблицей.

person Rob Farley    schedule 16.04.2015