SET IDENTITY_INSERT (Transact-SQL)
Ermöglicht, dass explizite Werte in die Identitätsspalte einer Tabelle eingefügt werden können.
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
Sie müssen der Besitzer des Objekts sein oder ein Mitglied der festen Serverrolle sysadmin bzw. der festen Datenbankrollen db_owner oder db_ddladmin.
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 AdventureWorks;
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