SET IDENTITY_INSERT (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-Datenbank in Microsoft Fabric

Mit dieser Anweisung können Sie explizite Werte in die Spalte IDENTITY einer Tabelle einfügen.

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, das die Tabelle enthält.

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 eine Tabelle diese Eigenschaft bereits auf ONgesetzt hat, und Sie eine SET IDENTITY_INSERT ON Anweisung für eine andere Tabelle ausgeben, liefert SQL Server eine Fehlermeldung, die besagt SET IDENTITY_INSERTON, dass bereits ist, und meldet die Tabelle, für die ON gesetzt ist.

  • Wenn das increment Argument der IDENTITY Funktion positiv ist und der eingefügte Wert größer ist als der aktuelle Identitätswert der Tabelle, verwendet die SQL Datenbank-Engine automatisch den neu eingefügten Wert als aktuellen Identitätswert.
  • Wenn das increment Argument der IDENTITY Funktion negativ ist und der eingefügte Wert kleiner als der aktuelle Identitätswert der 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

Du musst den Tisch besitzen oder eine Erlaubnis für den Tisch haben ALTER .

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 liefert folgenden Fehler:

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

Werkzeugtisch abwerfen.

DROP TABLE dbo.Tool;
GO