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 ON
hebben ingesteld. Als deze eigenschap al is ingesteld op ON
en 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 ON
is 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