Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:✅ Warehouse i Microsoft Fabric
Denna handledning förklarar hur man använder IDENTITY-kolumner i Fabric Data Warehouse för att skapa och hantera surrogatnycklar. Du lär dig hur man skapar tabeller med identitetskolumner, infogar data, infogar explicita värden med IDENTITY_INSERT, och återställer identitetsintervallet med DBCC CHECKIDENT.
Förutsättningar
- Tillgång till ett objekt i Lager i en arbetsyta med behörigheten Medarbetare eller högre.
- Ett frågeverktyg. Denna handledning använder SQL-frågeredigeraren i Microsoft Fabric-portalen, men du kan använda vilket T-SQL-frågeverktyg som helst.
- En grundläggande förståelse för T-SQL.
Vad är en identitetskolumn?
En IDENTITY kolumn är en numerisk kolumn som automatiskt genererar unika värden för nya rader. Detta beteende gör det idealiskt för att implementera surrogatnycklar eftersom varje rad får en unik identifierare utan manuell inmatning.
Skapa en identitetskolumn
För att definiera en IDENTITY kolumn, ange IDENTITY nyckelordet i kolumndefinitionen av CREATE TABLE T-SQL-syntaxen:
CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
[column_name] BIGINT IDENTITY,
[ ,... n ],
-- Other columns here
);
Skapa en tabell med en identitetskolumn
I denna handledning skapar du en enklare version av Trip tabellen från NY Taxi öppna dataset och lägger till en TripIDIDENTITY kolumn. Varje ny rad får ett TripID unikt värde i tabellen.
Definiera en tabell med en
IDENTITYkolumn:CREATE TABLE dbo.Trip ( TripID bigint IDENTITY, tpepPickupDateTime datetime2(6), tpepDropoffDateTime datetime2(6), passengerCount int, tripDistance float, fareAmount float, totalAmount float );Använd
COPY INTOför att mata in data i tabellen. När du använderCOPY INTOmed enIDENTITYkolumn, ange kolumnlistan och mappa den till kolumner i källdatan.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');Förhandsgranska datan och de värden som tilldelats kolumnen
IDENTITY:SELECT TOP 10 * FROM Trip;Utdata inkluderar det automatiskt genererade
TripIDvärdet för varje rad.Viktigt!
Dina värden kan skilja sig från värdena i den här artikeln.
IDENTITYKolumner ger värden som garanteras vara unika, men värdena är inte nödvändigtvis sekventiella eller ordningade, och luckor kan uppstå.Använd
INSERT INTOför att ta in nya rader:INSERT INTO dbo.Trip VALUES ('2026-01-01T00:00:00', '2013-01-01T00:12:00', 1, 2.4, 10.5, 13.0);En kolumnlista är valfri med
INSERT INTO. När du tillhandahåller en, ange namnen på alla kolumner för vilka du tillhandahåller indata, förutom kolumnenIDENTITY: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);Gå igenom de insatta raderna:
SELECT * FROM dbo.Trip WHERE CAST(tpepPickupDateTime AS date) = '2026-01-01';Observera de värden som tilldelats till de nya raderna:
Sätt in explicita värden med IDENTITY_INSERT
Du kan behöva infoga specifika värden i en identitetskolumn under datamigrering, när du fyller i sentinelvärden eller när du återställer data från en backup. Använd SET IDENTITY_INSERT för att aktivera dessa insättningar.
I detta avsnitt skapar du en dimensionstabell och använder IDENTITY_INSERT den för att lägga till sentinelrader med välkända nyckelvärden.
Skapa en dimensionstabell med en
IDENTITYkolumn:CREATE TABLE dbo.DimCustomer ( CustomerKey BIGINT IDENTITY, CustomerName VARCHAR(100), CustomerType VARCHAR(20) );Infoga vanliga rader. Identitetsvärdena genereras automatiskt:
INSERT INTO dbo.DimCustomer (CustomerName, CustomerType) VALUES ('Contoso Ltd', 'Enterprise'), ('Fabrikam Inc', 'SMB'), ('Northwind Traders', 'Enterprise');Aktivera
IDENTITY_INSERTför att lägga till sentinel-värden. NärIDENTITY_INSERTärON, ge en kolumnlista som inkluderar identitetskolumnen: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;Efter att explicita värden har infogats återställer du startvärdet för identitetskolumnen med
DBCC CHECKIDENTför att säkerställa att framtida automatiskt genererade värden inte kolliderar med de infogade värdena:DBCC CHECKIDENT('dbo.DimCustomer', RESEED);Verifiera att sentinelraderna visas bredvid automatiskt genererade rader:
SELECT * FROM dbo.DimCustomer ORDER BY CustomerKey;Infoga en rad och bekräfta att det automatiskt genererade värdet inte krockar:
INSERT INTO dbo.DimCustomer (CustomerName, CustomerType) VALUES ('Adventure Works', 'Enterprise'); SELECT * FROM dbo.DimCustomer ORDER BY CustomerKey;
Rensa upp handledningsresurser
Eventuellt, ta bort tabellerna som skapats under denna handledning:
DROP TABLE IF EXISTS dbo.Trip;
DROP TABLE IF EXISTS dbo.DimCustomer;
DROP TABLE IF EXISTS dbo.DimProduct;