หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
นําไปใช้กับ:✅ Warehouse ใน Microsoft Fabric
บทความนี้อธิบายวิธีใช้ SET IDENTITY_INSERT และ DBCC CHECKIDENT เพื่อรักษาค่าตัวตนที่มีอยู่ระหว่างการย้ายจาก SQL Server, Azure SQL Database หรือ Azure Synapse Analytics และรับประกันความสมบูรณ์ของการอ้างอิง
ความแตกต่างสําคัญจากแพลตฟอร์มอื่น ๆ
ก่อนย้ายข้อมูล โปรดเข้าใจความแตกต่างIDENTITYเหล่านี้ในการใช้งานใน Fabric คลังข้อมูล:
-
IDENTITYคอลัมน์รองรับเฉพาะชนิดข้อมูล Bigint เท่านั้น -
SEEDและINCREMENTพารามิเตอร์ไม่รองรับ ระบบจัดการค่าภายใน - ค่าต่าง ๆ รับประกันว่าจะเป็นเอกลักษณ์ แต่ไม่จําเป็นต้องเรียงลําดับเสมอไป ช่องว่างอาจเกิดขึ้นได้เนื่องจากสถาปัตยกรรมการประมวลผลแบบกระจาย
- Fabric คลังข้อมูล ไม่ได้บังคับใช้ข้อจํากัดที่สําคัญ
กลยุทธ์การโยกย้าย
โดยใช้ IDENTITY_INSERT support คุณสามารถย้ายค่าตัวตนไปยังตาราง IDENTITY Fabric คลังข้อมูล ที่ใช้คอลัมน์ได้โดยตรง:
- สร้างตารางปลายทางในรูปแบบ Fabric คลังข้อมูล พร้อม
IDENTITYคอลัมน์ - ใช้เพื่อ
SET IDENTITY_INSERT ONแทรกข้อมูลย้อนหลังโดยยังคงค่าตัวตนเดิมไว้ - เรียกใช้
DBCC CHECKIDENTกับRESEEDเพื่อปรับแนวช่วงข้อมูลตัวตนหลังจากการย้ายข้อมูล - อัปเดตการอ้างอิงคีย์ต่างประเทศหากจําเป็น
วิธีนี้จะรักษาค่าตัวตนเดิมไว้ รักษาความสมบูรณ์ของการอ้างอิงข้ามตาราง และอนุญาตให้ Fabric คลังข้อมูล กลับมาสร้างค่าที่ไม่ซ้ํากันหลังจากการย้ายข้อมูล
ตัวอย่าง: ย้ายตารางที่มีคอลัมน์ IDENTITY
ตัวอย่างต่อไปนี้ย้ายOrdersตารางจากแพลตฟอร์มต้นทางไปยัง Fabric คลังข้อมูล โดยยังคงรักษาค่าตัวตนไว้
ขั้นตอนที่ 1: สร้างตารางปลายทางที่มีคอลัมน์ IDENTITY
สร้างตารางปลายทางใน Fabric คลังข้อมูล คอลัมน์คีย์หลักใช้ IDENTITY:
CREATE TABLE dbo.Orders (
OrderID BIGINT IDENTITY,
OrderDate DATE,
CustomerID BIGINT,
TotalAmount DECIMAL(18, 2)
);
ขั้นตอนที่ 2: ย้ายข้อมูลด้วย IDENTITY_INSERT
ใช้เพื่อ SET IDENTITY_INSERT แทรกข้อมูลย้อนหลังที่มีค่าตัวตนเดิม วิธีนี้จะรักษา ID ที่มีอยู่ไว้ เพื่อให้ความสัมพันธ์ระหว่างตารางยังคงอยู่
-- Migrate Orders with original IDs
SET IDENTITY_INSERT dbo.Orders ON;
INSERT INTO dbo.Orders (OrderID, OrderDate, CustomerID, TotalAmount)
VALUES (101, '2025-01-15', 1, 5000.00),
(102, '2025-02-20', 2, 3200.00),
(103, '2025-03-10', 1, 7800.00),
(104, '2025-04-05', 3, 1500.00);
SET IDENTITY_INSERT dbo.Orders OFF;
สําหรับชุดข้อมูลขนาดใหญ่ คุณสามารถใช้ COPY INTO ร่วมกับ IDENTITY_INSERT:
COPY INTO dbo.Orders (OrderID 1, OrderDate 2, CustomerID 3, TotalAmount 4)
FROM 'https://storage.blob.core.windows.net/migration/orders.csv'
WITH (
FILE_TYPE = 'CSV',
IDENTITY_INSERT = 'ON'
);
ขั้นตอนที่ 3: เพิ่มการตั้งชื่อคอลัมน์ระบุตัวตนใหม่
หลังจากย้ายข้อมูลแล้ว ให้รัน DBCC CHECKIDENT กับ บน RESEED แต่ละตาราง การดําเนินการนี้จะสแกนช่วงข้อมูลประจําตัวที่ใช้ทั้งหมดและปรับค่าถัดไปเพื่อหลีกเลี่ยงการชนกับข้อมูลที่ถูกย้าย:
DBCC CHECKIDENT('dbo.Orders', RESEED);
ขั้นตอนที่ 4: ตรวจสอบการย้ายข้อมูลและทดสอบการแทรกใหม่
ยืนยันว่าข้อมูลที่ย้ายมายังคงสมบูรณ์และไฟล์แทรกใหม่จะได้รับค่าที่สร้างขึ้นโดยอัตโนมัติโดยไม่ทับซ้อนกับค่าที่ย้าย:
-- Verify migrated data
SELECT * FROM dbo.Orders ORDER BY OrderID;
-- Insert a row that receives an automatically generated ID
INSERT INTO dbo.Orders (OrderDate, CustomerID, TotalAmount)
VALUES ('2025-05-01', 1, 2500.00);
-- Verify that new IDs don't overlap with migrated data
SELECT * FROM dbo.Orders ORDER BY OrderID;
แนวทางปฏิบัติที่ดีที่สุด
- ควรหว่านเมล็ดใหม่หลังการย้ายทุกครั้ง รัน
DBCC CHECKIDENT('table_name', RESEED)หลังจากการย้ายตารางทุกครั้งเพื่อป้องกันการชนกันของค่าตัวตน - ใช้ COPY INTO สําหรับชุดข้อมูลขนาดใหญ่ สําหรับการย้ายตาราง
COPY INTOขนาดใหญ่จํานวนมาก จะIDENTITY_INSERT ONให้ประสิทธิภาพที่ดีกว่าคําสั่งแบบแถวต่อแถวINSERT - ตรวจสอบความถูกต้องของการอ้างอิง หลังจากการย้ายข้อมูล ให้ตรวจสอบว่าค่าคีย์ต่างประเทศในตารางลูกอ้างอิงถึงแถวที่ถูกต้องในตารางแม่