Gostaria de excluir dados de uma partição específica usando o ID da partição. Recebi consultas para truncar dados de partição específica para SQL 2016, mas não encontrei nenhuma consulta para versões inferiores.
Eu tentei a consulta abaixo para excluir apenas dados de partições com ID de partição 14 e 15.
delete from partitiontable1 WITH (PARTITIONS (14 to 15))
A instrução delete removerá a própria partição junto com os dados?
Quero manter a partição intacta e remover dados de partições específicas. Digamos, criei partições em uma tabela, ela tem 5 partições (1,2,3,4,5) e quero remover dados apenas da 2ª e 3ª partição.
Essa instrução de exclusão é uma sintaxe inválida do SQL Server 2012, portanto, não fará nada além de gerar um erro.
A remoção de uma partição e seu limite associado é feita com
MERGE
DDL; Instruções DML comoDELETE
nunca remover partições.A maneira mais eficiente de remover todas as linhas de uma partição no SQL 2014 e em versões anteriores é com
SWITCH
(o SQL 2016 permite que partições específicas sejam especificadas com umTRUNCATE
). Para usar SWITCH, crie uma tabela de preparo particionada de maneira semelhante com esquema e índices idênticos. Você pode então alternar dados entre tabelas como uma operação de metadados e, em seguida,TRUNCATE
a tabela de preparo.Esta resposta vem de Cathrine Wilhemsen , a quem eu recomendo ler e assistir presente se ela estiver em um evento próximo. O código vem principalmente dela, com uma mensagem para Itzik Ben-Gan e sua função GetNums.
Para resumir, você deseja alternar a partição para uma nova tabela e descartar a tabela. Você ainda terá seus números de partição depois, por favor veja o código abaixo (novamente principalmente de Cathrine, eu alterei um pouco.) como uma demonstração.