SET IDENTITY_INSERT (Transact-SQL)

Ermöglicht, dass explizite Werte in die Identitätsspalte einer Tabelle eingefügt werden können.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { 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 einer Tabelle mit einer Identitätsspalte.

Hinweise

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 zur Ausführungszeit und nicht zur Analysezeit festgelegt.

Berechtigungen

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

Beispiele

Im folgenden Beispiel wird eine Tabelle mit einer Identitätsspalte erstellt. Es wird gezeigt, wie mithilfe der SET IDENTITY_INSERT-Einstellung eine Lücke in den Identitätswerten, die aufgrund einer DELETE-Anweisung entstanden ist, gefüllt werden kann.

USE AdventureWorks2008R2;
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')
INSERT INTO dbo.Tool(Name) VALUES ('Hammer')
INSERT INTO dbo.Tool(Name) VALUES ('Saw')
INSERT INTO dbo.Tool(Name) VALUES ('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 a warning.
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 products table.
DROP TABLE dbo.Tool
GO