Sql-Server

我可以通過更新分區鍵在分區之間移動行嗎?

  • October 14, 2021

我認為這將是一個相當簡單的問題,但實際上我很難找到答案。

問題:您能否通過簡單地更新分區列使其跨越分區邊界來將分區表中的數據行從一個分區移動到另一個分區?

例如,如果我有一個具有分區鍵的表:

CREATE TABLE SampleTable
(
   SampleID INT PRIMARY KEY,
   SampleResults VARCHAR(100) NOT NULL,
)

使用映射到主鍵的分區函式:

CREATE PARTITION FUNCTION MyPartitionFunc (INT) AS
RANGE LEFT FOR VALUES (10000, 20000);

我可以通過將 SampleID 從 1 更改為(例如)500,000 將一行從第一個分區移動到第三個分區嗎?

注意:我將其標記為 sql server 2005 和 2008,因為它們都支持分區。他們的處理方式不同嗎?

我沒有要測試的 2005 伺服器。然而,2008 年似乎按預期處理了這個問題:

USE [Test]
GO
CREATE TABLE [IDRanges](
   [ID] [int] NOT NULL
)
GO

CREATE PARTITION FUNCTION IDRange1 (int)
AS RANGE LEFT FOR VALUES (10) ;
GO
--Add one record to each partition
INSERT INTO IDRanges ([ID]) VALUES (17)
INSERT INTO IDRanges ([ID]) VALUES (7)
GO
--Verify records in partition
SELECT $PARTITION.IDRange1([ID]) AS Partition, COUNT(*) AS [COUNT] 
FROM IDRanges
GROUP BY $PARTITION.IDRange1([ID]) 
ORDER BY Partition ;
GO
--Move row between partitions
UPDATE IDRanges
SET [ID] = 8 WHERE [ID] = 17
GO
--Verify records in partition
SELECT $PARTITION.IDRange1([ID]) AS Partition, COUNT(*) AS [COUNT] 
FROM IDRanges
GROUP BY $PARTITION.IDRange1([ID]) 
ORDER BY Partition ;

您應該在更新之前在每個分區中看到一條記錄,然後在第一個分區中看到兩條記錄。

引用自:https://dba.stackexchange.com/questions/4511