หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
นําไปใช้กับ:✅ Warehouse ใน Microsoft Fabric
บทเรียนนี้อธิบายวิธีใช้คอลัมน์ IDENTITY ใน Fabric คลังข้อมูล เพื่อสร้างและจัดการกุญแจตัวแทน คุณจะได้เรียนรู้วิธีสร้างตารางที่มีคอลัมน์ระบุตัวตน แทรกข้อมูล แทรกค่าที่ชัดเจนด้วย IDENTITY_INSERT, และรีซีดช่วงตัวตนด้วย DBCC CHECKIDENT.
ข้อกําหนดเบื้องต้น
- การเข้าถึงรายการคลังสินค้าในพื้นที่ทํางานด้วยสิทธิ์ Contributor หรือสูงกว่า
- เครื่องมือค้นหา บทเรียนนี้ใช้ตัวแก้ไขคําสั่ง SQL ในพอร์ทัล Microsoft Fabric แต่คุณสามารถใช้เครื่องมือค้นหา T-SQL ใดก็ได้
- ความเข้าใจพื้นฐานเกี่ยวกับ T-SQL
คอลัมน์ IDENTITY คืออะไร
IDENTITYคอลัมน์คือคอลัมน์ตัวเลขที่สร้างค่าที่ไม่ซ้ํากันสําหรับแถวใหม่โดยอัตโนมัติ พฤติกรรมนี้ทําให้เหมาะสําหรับการใช้งานคีย์ตัวแทน เพราะแต่ละแถวจะได้รับตัวระบุเฉพาะโดยไม่ต้องกรอกข้อมูลด้วยตนเอง
สร้างคอลัมน์ IDENTITY
เพื่อกําหนด IDENTITY คอลัมน์ ให้ระบุ IDENTITY คําสําคัญในคําจํากัดความคอลัมน์ของ CREATE TABLE ไวยากรณ์ T-SQL:
CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
[column_name] BIGINT IDENTITY,
[ ,... n ],
-- Other columns here
);
สร้างตารางด้วยคอลัมน์ IDENTITY
ในบทเรียนนี้ คุณจะสร้างเวอร์ชันที่ง่ายขึ้นของ Trip ตารางจาก ชุดข้อมูลเปิดของ NY Taxi และเพิ่ม TripIDIDENTITY คอลัมน์ แต่ละแถวใหม่จะได้รับ TripID ค่าที่ไม่ซ้ํากันในตาราง
กําหนดตารางที่มี
IDENTITYคอลัมน์:CREATE TABLE dbo.Trip ( TripID bigint IDENTITY, tpepPickupDateTime datetime2(6), tpepDropoffDateTime datetime2(6), passengerCount int, tripDistance float, fareAmount float, totalAmount float );ใช้เพื่อ
COPY INTOนําเข้าข้อมูลเข้าสู่ตาราง เมื่อคุณใช้กับCOPY INTOIDENTITYคอลัมน์ ให้ระบุรายการคอลัมน์และแมปกับคอลัมน์ในข้อมูลต้นทางCOPY INTO dbo.Trip (tpepPickupDateTime, tpepDropoffDateTime, passengerCount, tripDistance, fareAmount, totalAmount) FROM 'https://azureopendatastorage.blob.core.windows.net/nyctlc/yellow/puYear=2013/puMonth=1/*.parquet' WITH( FILE_TYPE = 'PARQUET');ดูตัวอย่างข้อมูลและค่าที่กําหนดให้กับ
IDENTITYคอลัมน์:SELECT TOP 10 * FROM Trip;ผลลัพธ์จะรวมค่าที่สร้างขึ้น
TripIDโดยอัตโนมัติสําหรับแต่ละแถวสําคัญ
ค่าของคุณอาจแตกต่างจากค่าที่กล่าวในบทความนี้
IDENTITYคอลัมน์จะสร้างค่าที่รับประกันว่าไม่ซ้ํากัน แต่ค่าเหล่านั้นไม่จําเป็นต้องเรียงลําดับหรือเรียงลําดับ และอาจมีช่องว่างเกิดขึ้นได้ใช้
INSERT INTOสําหรับนําเข้าแถวใหม่:INSERT INTO dbo.Trip VALUES ('2026-01-01T00:00:00', '2013-01-01T00:12:00', 1, 2.4, 10.5, 13.0);รายการคอลัมน์เป็นตัวเลือกที่มี
INSERT INTO. เมื่อคุณให้ข้อมูลใหม่ ให้ระบุชื่อของคอลัมน์ทั้งหมดที่คุณให้ข้อมูลนําเข้า ยกเว้นIDENTITYคอลัมน์:INSERT INTO dbo.Trip (tpepPickupDateTime, tpepDropoffDateTime, passengerCount, tripDistance, fareAmount, totalAmount) VALUES ('2026-01-01T08:15:00', '2013-01-01T08:42:00', 2, 6.8, 24.5, 30.0);ตรวจสอบแถวที่แทรกไว้:
SELECT * FROM dbo.Trip WHERE CAST(tpepPickupDateTime AS date) = '2026-01-01';สังเกตค่าที่กําหนดให้กับแถวใหม่:
แทรกค่าที่ชัดเจนด้วย IDENTITY_INSERT
คุณอาจต้องแทรกค่าที่ระบุไว้ในคอลัมน์ระบุตัวตนระหว่างการย้ายข้อมูล เมื่อเติมค่าของ sentinel หรือเมื่อกู้คืนข้อมูลจากข้อมูลสํารอง ใช้ SET IDENTITY_INSERT เพื่อเปิดใช้งานการแทรกเหล่านี้
ในส่วนนี้ คุณจะสร้างตารางมิติและใช้เพื่อเพิ่ม IDENTITY_INSERT แถวเซนทิเนลที่มีค่าคีย์ที่รู้จักกันดี
สร้างตารางมิติที่มี
IDENTITYคอลัมน์:CREATE TABLE dbo.DimCustomer ( CustomerKey BIGINT IDENTITY, CustomerName VARCHAR(100), CustomerType VARCHAR(20) );แทรกแถวปกติ ค่าตัวตนจะถูกสร้างขึ้นโดยอัตโนมัติ:
INSERT INTO dbo.DimCustomer (CustomerName, CustomerType) VALUES ('Contoso Ltd', 'Enterprise'), ('Fabrikam Inc', 'SMB'), ('Northwind Traders', 'Enterprise');เปิดใช้งาน
IDENTITY_INSERTเพื่อเพิ่มค่าของ Sentinel เมื่อเป็นIDENTITY_INSERTON, ให้รายการคอลัมน์ที่รวมคอลัมน์เอกลักษณ์:SET IDENTITY_INSERT dbo.DimCustomer ON; INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName, CustomerType) VALUES (-1, 'Unknown', 'Sentinel'), (-2, 'Not Applicable', 'Sentinel'); SET IDENTITY_INSERT dbo.DimCustomer OFF;หลังจากแทรกค่าที่ชัดเจนแล้ว ให้ reseed คอลัมน์ identity ด้วย เพื่อให้แน่ใจว่า
DBCC CHECKIDENTค่าที่สร้างขึ้นโดยอัตโนมัติในอนาคตจะไม่ชนกับค่าที่แทรกไว้:DBCC CHECKIDENT('dbo.DimCustomer', RESEED);ตรวจสอบว่าแถวเซนทิเนลปรากฏเคียงข้างแถวที่สร้างโดยอัตโนมัติ:
SELECT * FROM dbo.DimCustomer ORDER BY CustomerKey;แทรกแถวและยืนยันว่าค่าที่สร้างขึ้นโดยอัตโนมัติไม่ขัดแย้งกัน:
INSERT INTO dbo.DimCustomer (CustomerName, CustomerType) VALUES ('Adventure Works', 'Enterprise'); SELECT * FROM dbo.DimCustomer ORDER BY CustomerKey;
ล้างทรัพยากรบทช่วยสอน
หากต้องการ สามารถลบตารางที่สร้างขึ้นระหว่างบทเรียนนี้ได้ตามต้องการ:
DROP TABLE IF EXISTS dbo.Trip;
DROP TABLE IF EXISTS dbo.DimCustomer;
DROP TABLE IF EXISTS dbo.DimProduct;