Freigeben über


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 ONfestgelegt werden. Wenn diese Eigenschaft bereits auf ONfestgelegt 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 ONist, 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 ONfest.

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