SET IDENTITY_INSERT (Transact-SQL)
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse Analytics
Ermöglicht das Einfügen expliziter Werte in die Identitätsspalte einer Tabelle.
Transact-SQL-Syntaxkonventionen
Syntax
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
Argumente
database_name
Der Name der Datenbank, in der sich die angegebene Tabelle befindet.
schema_name
Der Name des Schemas, zu dem die Tabelle gehört.
table_name
Der Name einer Tabelle mit einer Identitätsspalte.
Bemerkungen
Zu jedem Zeitpunkt kann nur eine Tabelle in einer Sitzung die IDENTITY_INSERT
-Eigenschaft auf ON
festgelegt werden. Wenn diese Eigenschaft bereits auf ON
festgelegt ist und eine SET IDENTITY_INSERT ON
-Anweisung für eine andere Tabelle ausgegeben wird, gibt SQL Server eine Fehlermeldung zurück, die besagt, dass SET IDENTITY_INSERT
bereits ON
ist, und meldet die Tabelle, für die ON
festgelegt ist.
Wenn der eingefügte Wert größer als der aktuelle Identitätswert für die Tabelle ist, verwendet SQL Server automatisch den neu eingefügten Wert als aktuellen Identitätswert.
Die Einstellung von SET IDENTITY_INSERT
wird zur Ausführung oder Laufzeit und nicht zur Analysezeit festgelegt.
Berechtigungen
Der Benutzer muss über die Tabelle verfügen oder über ALTER
Berechtigung für die Tabelle verfügen.
Beispiele
Im folgenden Beispiel wird eine Tabelle mit einer Identitätsspalte erstellt. Es zeigt, wie mithilfe der SET IDENTITY_INSERT
-Einstellung eine aufgrund einer DELETE
-Anweisung entstandene Lücke in den Identitätswerten gefüllt werden kann.
USE AdventureWorks2022;
GO
Tooltabelle erstellen.
CREATE TABLE dbo.Tool
(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR (40) NOT NULL
);
GO
Fügen Sie Werte in die Tabelle "Produkte" ein.
INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
('Hammer'),
('Saw'),
('Shovel');
GO
Erstellen Sie eine Lücke in den Identitätswerten.
DELETE dbo.Tool
WHERE Name = 'Saw';
GO
SELECT *
FROM dbo.Tool;
GO
Versuchen Sie, einen expliziten ID-Wert von 3 einzufügen.
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
Der vorherige INSERT
Code sollte den folgenden Fehler zurückgeben:
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.
Legen Sie IDENTITY_INSERT
auf ON
fest.
SET IDENTITY_INSERT dbo.Tool ON;
GO
Versuchen Sie, einen expliziten ID-Wert von 3 einzufügen.
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
SELECT *
FROM dbo.Tool;
GO
Drop tool table.
DROP TABLE dbo.Tool;
GO