Удалить раздел по имени sql server

#sql-server #partition

#sql-сервер #раздел

Вопрос:

Я хотел бы знать, как удалить раздел по имени в SQL SERVER, как это делает MySQL, например :

 CREATE TABLE t1 (
        id INT,
        year_col INT
    )
    PARTITION BY RANGE (year_col) (
        PARTITION p0 VALUES LESS THAN (1991),
        PARTITION p1 VALUES LESS THAN (1995),
        PARTITION p2 VALUES LESS THAN (1999)
    );
ALTER TABLE t1 DROP PARTITION p0, p1;
  

Каждый день создается новый раздел и удаляются старые. Потому что это ежедневный раздел.

Я настроил раздел, подобный:

     CREATE PARTITION FUNCTION [pf_trans_date](datetime2(3)) AS RANGE LEFT 
FOR VALUES (N'2019-03-27T00:00:00.000', N'2019-03-28T00:00:00.000')


 CREATE PARTITION SCHEME [sh_trans_date] AS PARTITION [pf_trans_date] 
TO ([PRIMARY], [PRIMARY])
  

и я могу добавить новый раздел :

 ALTER PARTITION SCHEME [sh_trans_date]
 NEXT USED [PRIMARY]
 ALTER PARTITION FUNCTION [pf_trans_date_byhour]() SPLIT RANGE('2019/03/29')
  

Теперь проблема в том, как я могу удалить старую дату раздела 2019-03-27T00:00:00.000 и все данные в нем. Потому что я не вижу никакой функции, которая делает это в SQL Server 2017.

Комментарии:

1. Взгляните на это видео: youtube.com/watch?v=aoLGMFwpdyg Они switch partition в другую таблицу

2. Хорошо, я пойду посмотрю это.

3. @vercelli, большое вам спасибо за ответ. Однако я не понимаю, почему они это так усложняют. Я попытаюсь усвоить это в своем маленьком мозгу. 😛

4. @kizawatomaru — переключение раздела на пустую таблицу позволяет использовать шаблоны типов архивирования, когда вместо простого удаления старых данных вы объединяете их в другую таблицу, в которой хранятся старые данные. Если вы этого не хотите (и если вы используете SQL 2016 ), truncate table принимает аргумент partition. В любом случае, вам, вероятно, следует удалить старую границу раздела.

5. @BenThul — ты был прав. truncate table этого недостаточно, я также должен удалить старую границу раздела. Но способ сделать это не для такого ребенка, как я.