SET IDENTITY_INSERT (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure 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
Name der Datenbank, in der sich die angegebene Tabelle befindet.

schema_name
Der Name des Schemas, zu dem die Tabelle gehört.

table_name
Name einer Tabelle mit einer Identitätsspalte.

Bemerkungen

Die IDENTITY_INSERT-Eigenschaft kann in einer Sitzung zu jedem Zeitpunkt nur für eine einzige Tabelle auf ON festgelegt sein. Wenn diese Eigenschaft bereits für eine Tabelle 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 den Wert ON hat, und die angibt, für welche Tabelle der Wert 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 beim Ausführen bzw. zur Laufzeit festgelegt, nicht beim Analysieren.

Berechtigungen

Der Benutzer muss der Besitzer der Tabelle sein oder die ALTER-Berechtigung für die Tabelle besitzen.

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  
-- Create tool table.  
CREATE TABLE dbo.Tool(  
   ID INT IDENTITY NOT NULL PRIMARY KEY,   
   Name VARCHAR(40) NOT NULL  
);  
GO  
-- Inserting values into products table.  
INSERT INTO dbo.Tool(Name)   
VALUES ('Screwdriver')  
        , ('Hammer')  
        , ('Saw')  
        , ('Shovel');  
GO  
  
-- Create a gap in the identity values.  
DELETE dbo.Tool  
WHERE Name = 'Saw';  
GO  
  
SELECT *   
FROM dbo.Tool;  
GO  
  
-- Try to insert an explicit ID value of 3;  
-- should return an error:
-- 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.
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel');  
GO  
-- SET IDENTITY_INSERT to ON.  
SET IDENTITY_INSERT dbo.Tool ON;  
GO  
  
-- Try to insert an explicit ID value of 3.  
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel');  
GO  
  
SELECT *   
FROM dbo.Tool;  
GO  
-- Drop tool table.  
DROP TABLE dbo.Tool;  
GO  

Weitere Informationen

CREATE TABLE (Transact-SQL)
IDENTITY (Eigenschaft) (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
INSERT (Transact-SQL)
SET-Anweisungen (Transact-SQL)