对于任何想要解决此问题的人,这是我编写的一个存储过程:
------------------------------------------------------
-- Switches all non-empty partitions from a switch_in
-- table into a target table, and switches all replaced
-- partitions from the target table into a switch_out
-- table.
------------------------------------------------------
CREATE PROC [dbo].[SwitchAllPopulatedPartitions]
@table varchar(1000),
@table_in varchar(1000) = null,
@table_out varchar(1000) = null
AS
SET @table_in = ISNULL(@table_in, @table + '_SwitchIn');
SET @table_out = ISNULL(@table_out, @table + '_SwitchOut');
DECLARE @object_id int = OBJECT_ID(@table);
DECLARE @object_id_in int = OBJECT_ID(@table_in );
DECLARE @object_id_out int = OBJECT_ID(@table_out );
DECLARE @SQL varchar(max) = 'TRUNCATE TABLE ' + @table_out + ';' + CHAR(13);
SELECT @SQL = @SQL
+ 'ALTER TABLE ' + @table + ' SWITCH PARTITION ' + CAST(partition_number as varchar(10))
+ ' TO ' + @table_out + ' PARTITION ' + CAST(partition_number as varchar(10)) + '; ' + CHAR(13)
+ 'ALTER TABLE ' + @table_in + ' SWITCH PARTITION ' + CAST(partition_number as varchar(10))
+ ' TO ' + @table + ' PARTITION ' + CAST(partition_number as varchar(10)) + '; ' + CHAR(13)
from sys.partitions
where OBJECT_ID = @object_id_in and index_id = 1 and rows > 0
SET @SQL = @SQL + 'TRUNCATE TABLE ' + @table_in + ';' + CHAR(13);
EXEC (@SQL);
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2485 次 |
| 最近记录: |