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

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure sìAzure SQL Data Warehouse noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse noParallel Data Warehouse

Consente l'inserimento di valori espliciti nella colonna Identity di una tabella.Allows explicit values to be inserted into the identity column of a table.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

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

ArgomentiArguments

database_namedatabase_name
Nome del database contenente la tabella specificata.Is the name of the database in which the specified table resides.

schema_nameschema_name
Nome dello schema a cui appartiene la tabella.Is the name of the schema to which the table belongs.

table_nametable_name
Nome di una tabella contenente una colonna Identity.Is the name of a table with an identity column.

RemarksRemarks

La proprietà IDENTITY_INSERT può essere impostata su ON per una sola tabella di una sessione.At any time, only one table in a session can have the IDENTITY_INSERT property set to ON. Se in una tabella tale proprietà è già impostata su ON e viene eseguita un'istruzione SET IDENTITY_INSERT ON per un'altra tabella, SQL ServerSQL Server visualizza un messaggio di errore per segnalare che la proprietà SET IDENTITY_INSERT è già impostata su ON e indicata la tabella per la quale l'opzione è impostata.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.

Se il valore immesso è maggiore del valore Identity corrente per la tabella, il nuovo valore viene utilizzato automaticamente da SQL ServerSQL Server come valore Identity corrente.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.

L'opzione SET IDENTITY_INSERT viene impostata in fase di esecuzione, non in fase di analisi.The setting of SET IDENTITY_INSERT is set at execute or run time and not at parse time.

AutorizzazioniPermissions

L'utente deve essere il proprietario della tabella o deve disporre dell'autorizzazione ALTER per la tabella.User must own the table or have ALTER permission on the table.

EsempiExamples

Nell'esempio seguente viene creata una tabella contenente una colonna Identity e viene illustrato come tramite l'impostazione di SET IDENTITY_INSERT sia possibile completare un'interruzione nella sequenza di valori Identity generata da un'istruzione DELETE.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  

Vedere ancheSee Also

CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
IDENTITY (proprietà) (Transact-SQL) IDENTITY (Property) (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL) SCOPE_IDENTITY (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
Istruzioni SET (Transact-SQL)SET Statements (Transact-SQL)