Freigeben über


SET IDENTITY_INSERT (Transact-SQL)

Ermöglicht das Einfügen expliziter Werte in die Identitätsspalte einer Tabelle.

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 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 AdventureWorks2012;
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

Siehe auch

Verweis

CREATE TABLE (Transact-SQL)

IDENTITY-Eigenschaft (Transact-SQL)

SCOPE_IDENTITY (Transact-SQL)

INSERT (Transact-SQL)

SET-Anweisungen (Transact-SQL)