SET IDENTITY_INSERT (Transact-SQL)SET IDENTITY_INSERT (Transact-SQL)

GILT FÜR: jaSQL Server jaAzure SQL-DatenbankjaAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse noParallel Data Warehouse

Ermöglicht das Einfügen expliziter Werte in die Identitätsspalte einer Tabelle.Allows explicit values to be inserted into the identity column of a table.

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

  
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }  

ArgumenteArguments

database_namedatabase_name
Name der Datenbank, in der sich die angegebene Tabelle befindet.Is the name of the database in which the specified table resides.

schema_nameschema_name
Der Name des Schemas, zu dem die Tabelle gehört.Is the name of the schema to which the table belongs.

table_nametable_name
Name einer Tabelle mit einer Identitätsspalte.Is the name of a table with an identity column.

BemerkungenRemarks

Die IDENTITY_INSERT-Eigenschaft kann in einer Sitzung zu jedem Zeitpunkt nur für eine einzige Tabelle auf ON festgelegt sein.At any time, only one table in a session can have the IDENTITY_INSERT property set to ON. 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 ServerSQL 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.If a table already has this property set to ON, and a SET IDENTITY_INSERT ON statement is issued for another table, SQL ServerSQL Server returns an error message that states SET IDENTITY_INSERT is already ON and reports the table it is set ON for.

Wenn der eingefügte Wert größer als der aktuelle Identitätswert für die Tabelle ist, verwendet SQL ServerSQL Server automatisch den neu eingefügten Wert als aktuellen Identitätswert.If the value inserted is larger than the current identity value for the table, SQL ServerSQL Server automatically uses the new inserted value as the current identity value.

Die Einstellung von SET IDENTITY_INSERT wird beim Ausführen bzw. zur Laufzeit festgelegt, nicht beim Analysieren.The setting of SET IDENTITY_INSERT is set at execute or run time and not at parse time.

BerechtigungenPermissions

Der Benutzer muss der Besitzer der Tabelle sein oder die ALTER-Berechtigung für die Tabelle besitzen.User must own the table or have ALTER permission on the table.

BeispieleExamples

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.The following example creates a table with an identity column and shows how the SET IDENTITY_INSERT setting can be used to fill a gap in the identity values caused by a DELETE statement.

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')  
        , ('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 'AdventureWorks2012.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 products table.  
DROP TABLE dbo.Tool;  
GO  

Weitere InformationenSee Also

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