Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL-database in Microsoft Fabric Preview
Hiermee maakt u een identiteitskolom in een tabel. Deze eigenschap wordt gebruikt met de instructies CREATE TABLE en ALTER TABLE Transact-SQL.
Note
De eigenschap IDENTITY verschilt van de eigenschap SQL-DMO Identity waarmee de eigenschap rij-id van een kolom wordt weergegeven.
              
              
              Transact-SQL syntaxis-conventies
Syntax
IDENTITY [ (seed , increment) ]
Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.
Arguments
seed
De waarde die wordt gebruikt voor de eerste rij die in de tabel is geladen.
increment
De incrementele waarde die wordt toegevoegd aan de identiteitswaarde van de vorige rij die is geladen.
Note
In Azure Synapse Analytics-waarden voor identiteiten worden niet incrementeel vanwege de gedistribueerde architectuur van het datawarehouse. Zie Identity gebruiken om surrogaatsleutels te maken in een Synapse SQL-pool voor meer informatie.
U moet zowel het zaad als het aantal stappen opgeven of geen van beide. Als geen van beide is opgegeven, is de standaardwaarde (1,1).
Remarks
Identiteitskolommen kunnen worden gebruikt voor het genereren van sleutelwaarden. De identiteitseigenschap in een kolom garandeert de volgende voorwaarden:
- Elke nieuwe waarde wordt gegenereerd op basis van de huidige seed en increment. 
- Elke nieuwe waarde voor een bepaalde transactie verschilt van andere gelijktijdige transacties in de tabel. 
De identiteitseigenschap in een kolom garandeert niet de volgende voorwaarden:
- Uniekheid van de waarde: uniekheid moet worden afgedwongen met behulp van een - PRIMARY KEYof- UNIQUEbeperking of- UNIQUEindex.- Note - Azure Synapse Analytics biedt geen ondersteuning - PRIMARY KEYvoor of- UNIQUEbeperking of- UNIQUEindex. Zie Identity gebruiken om surrogaatsleutels te maken in een Synapse SQL-pool voor meer informatie.
- Opeenvolgende waarden binnen een transactie : een transactie die meerdere rijen invoegt, krijgt niet gegarandeerd opeenvolgende waarden voor de rijen omdat andere gelijktijdige invoegingen in de tabel kunnen optreden. Als waarden opeenvolgend moeten zijn, moet de transactie een exclusieve vergrendeling in de tabel gebruiken of het - SERIALIZABLEisolatieniveau gebruiken.
- Opeenvolgende waarden na het opnieuw opstarten van de server of andere fouten : SQL Server kan identiteitswaarden in de cache opslaan om prestatieredenen en sommige van de toegewezen waarden kunnen verloren gaan tijdens een databasefout of het opnieuw opstarten van de server. Dit kan leiden tot hiaten in de identiteitswaarde bij het invoegen. Als hiaten niet acceptabel zijn, moet de toepassing een eigen mechanisme gebruiken om sleutelwaarden te genereren. Het gebruik van een reeksgenerator met de - NOCACHEoptie kan de hiaten beperken tot transacties die nooit worden doorgevoerd.
- Hergebruik van waarden : voor een bepaalde identiteitseigenschap met specifieke seed/increment worden de identiteitswaarden niet opnieuw gebruikt door de engine. Als een bepaalde invoeginstructie mislukt of als de invoeginstructie wordt teruggedraaid, gaan de verbruikte identiteitswaarden verloren en worden ze niet opnieuw gegenereerd. Dit kan leiden tot hiaten wanneer de volgende identiteitswaarden worden gegenereerd. 
Deze beperkingen maken deel uit van het ontwerp om de prestaties te verbeteren en omdat ze in veel voorkomende situaties acceptabel zijn. Als u vanwege deze beperkingen geen identiteitswaarden kunt gebruiken, maakt u een afzonderlijke tabel met een huidige waarde en beheert u de toegang tot de tabel- en nummertoewijzing met uw toepassing.
Als een tabel met een identiteitskolom wordt gepubliceerd voor replicatie, moet de identiteitskolom worden beheerd op een manier die geschikt is voor het gebruikte type replicatie. Zie Identiteitskolommen repliceren voor meer informatie.
Er kan slechts één identiteitskolom per tabel worden gemaakt.
In tabellen die zijn geoptimaliseerd voor geheugen, moet de seed en increment worden ingesteld op 1, 1. Het instellen van de seed of increment op een andere waarde dan 1 resulteert in de volgende fout: The use of seed and increment values other than 1 is not supported with memory optimized tables.
Zodra de identiteitseigenschap is ingesteld op een kolom, kan deze niet worden verwijderd. Het gegevenstype kan worden gewijzigd zolang het nieuwe gegevenstype compatibel is met de identiteitseigenschap.
Examples
A. De eigenschap IDENTITY gebruiken met CREATE TABLE
In het volgende voorbeeld wordt een nieuwe tabel gemaakt met behulp van de IDENTITY eigenschap voor een automatisch verhogend identificatienummer.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.new_employees', 'U') IS NOT NULL
    DROP TABLE new_employees;
GO
CREATE TABLE new_employees (
    id_num INT IDENTITY(1, 1),
    fname VARCHAR(20),
    minit CHAR(1),
    lname VARCHAR(30)
);
INSERT new_employees (fname, minit, lname)
VALUES ('Karin', 'F', 'Josephs');
INSERT new_employees (fname, minit, lname)
VALUES ('Pirkko', 'O', 'Koskitalo');
B. Algemene syntaxis gebruiken om hiaten in identiteitswaarden te vinden
In het volgende voorbeeld ziet u algemene syntaxis voor het vinden van hiaten in identiteitswaarden wanneer gegevens worden verwijderd.
Note
Het eerste deel van het volgende Transact-SQL script is alleen bedoeld voor illustratie. U kunt het Transact-SQL script uitvoeren dat begint met de opmerking: -- Create the img table.
-- Here is the generic syntax for finding identity value gaps in data.
-- The illustrative example starts here.
SET IDENTITY_INSERT tablename ON;
DECLARE @minidentval column_type;
DECLARE @maxidentval column_type;
DECLARE @nextidentval column_type;
SELECT @minidentval = MIN($IDENTITY),
    @maxidentval = MAX($IDENTITY)
FROM tablename
IF @minidentval = IDENT_SEED('tablename')
    SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('tablename')
    FROM tablename t1
    WHERE $IDENTITY BETWEEN IDENT_SEED('tablename')
            AND @maxidentval
        AND NOT EXISTS (
            SELECT *
            FROM tablename t2
            WHERE t2.$IDENTITY = t1.$IDENTITY + IDENT_INCR('tablename')
            )
ELSE
    SELECT @nextidentval = IDENT_SEED('tablename');
SET IDENTITY_INSERT tablename OFF;
-- Here is an example to find gaps in the actual data.
-- The table is called img and has two columns: the first column
-- called id_num, which is an increasing identification number, and the
-- second column called company_name.
-- This is the end of the illustration example.
-- Create the img table.
-- If the img table already exists, drop it.
-- Create the img table.
IF OBJECT_ID('dbo.img', 'U') IS NOT NULL
    DROP TABLE img;
GO
CREATE TABLE img (
    id_num INT IDENTITY(1, 1),
    company_name SYSNAME
);
INSERT img (company_name)
VALUES ('New Moon Books');
INSERT img (company_name)
VALUES ('Lucerne Publishing');
-- SET IDENTITY_INSERT ON and use in img table.
SET IDENTITY_INSERT img ON;
DECLARE @minidentval SMALLINT;
DECLARE @nextidentval SMALLINT;
SELECT @minidentval = MIN($IDENTITY)
FROM img
IF @minidentval = IDENT_SEED('img')
    SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('img')
    FROM img t1
    WHERE $IDENTITY BETWEEN IDENT_SEED('img')
            AND 32766
        AND NOT EXISTS (
            SELECT *
            FROM img t2
            WHERE t2.$IDENTITY = t1.$IDENTITY + IDENT_INCR('img')
            )
ELSE
    SELECT @nextidentval = IDENT_SEED('img');
SET IDENTITY_INSERT img OFF;