Delen via


SET IDENTITY_INSERT (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics-

Hiermee kunnen expliciete waarden worden ingevoegd in de identiteitskolom van een tabel.

Transact-SQL syntaxisconventies

Syntaxis

SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }

Argumenten

database_name

De naam van de database waarin de opgegeven tabel zich bevindt.

schema_name

De naam van het schema waartoe de tabel behoort.

table_name

De naam van een tabel met een identiteitskolom.

Opmerkingen

Op elk gewenst moment kan slechts één tabel in een sessie de eigenschap IDENTITY_INSERT op ONhebben ingesteld. Als deze eigenschap al is ingesteld op ONen er een SET IDENTITY_INSERT ON-instructie wordt uitgegeven voor een andere tabel, retourneert SQL Server een foutbericht waarin wordt aangegeven dat SET IDENTITY_INSERT al ONis en de tabel rapporteert waarvoor ON is ingesteld.

Als de ingevoegde waarde groter is dan de huidige identiteitswaarde voor de tabel, gebruikt SQL Server automatisch de nieuwe ingevoegde waarde als de huidige identiteitswaarde.

De instelling van SET IDENTITY_INSERT wordt ingesteld bij uitvoering of uitvoeringstijd en niet op parseringstijd.

Machtigingen

De gebruiker moet eigenaar zijn van de tabel of ALTER machtiging voor de tabel hebben.

Voorbeelden

In het volgende voorbeeld wordt een tabel met een identiteitskolom gemaakt en ziet u hoe de SET IDENTITY_INSERT instelling kan worden gebruikt om een hiaat in te vullen in de identiteitswaarden die worden veroorzaakt door een DELETE-instructie.

USE AdventureWorks2022;
GO

Knoptabel maken.

CREATE TABLE dbo.Tool
(
    ID INT IDENTITY NOT NULL PRIMARY KEY,
    Name VARCHAR (40) NOT NULL
);
GO

Waarden invoegen in de tabel producten.

INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
    ('Hammer'),
    ('Saw'),
    ('Shovel');
GO

Maak een hiaat in de identiteitswaarden.

DELETE dbo.Tool
WHERE Name = 'Saw';
GO

SELECT *
FROM dbo.Tool;
GO

Probeer een expliciete id-waarde van 3 in te voegen.

INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO

De vorige INSERT-code moet de volgende fout retourneren:

An explicit value for the identity column in table 'AdventureWorks2022.dbo.Tool' can only be specified when a column list is used and IDENTITY_INSERT is ON.

Stel IDENTITY_INSERT in op ON.

SET IDENTITY_INSERT dbo.Tool ON;
GO

Probeer een expliciete id-waarde van 3 in te voegen.

INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO

SELECT *
FROM dbo.Tool;
GO

Gereedschapstabel neerzetten.

DROP TABLE dbo.Tool;
GO