SET IDENTITY_INSERT (Transact-SQL)

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics

Consente l'inserimento di valori espliciti nella colonna Identity di una tabella.

Convenzioni di sintassi Transact-SQL

Sintassi

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

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere la documentazione delle versioni precedenti.

Argomenti

database_name
Nome del database contenente la tabella specificata.

schema_name
Nome dello schema a cui appartiene la tabella.

table_name
Nome di una tabella contenente una colonna Identity.

Osservazioni:

La proprietà IDENTITY_INSERT può essere impostata su ON per una sola tabella di una sessione. Se in una tabella tale proprietà è già impostata su ON e viene eseguita un'istruzione SET IDENTITY_INSERT ON per un'altra tabella, SQL Server visualizza un messaggio di errore per segnalare che la proprietà SET IDENTITY_INSERT è già impostata su ON e indica la tabella per la quale l'opzione è impostata.

Se il valore immesso è maggiore del valore Identity corrente per la tabella, il nuovo valore viene utilizzato automaticamente da SQL Server come valore Identity corrente.

L'opzione SET IDENTITY_INSERT viene impostata in fase di esecuzione, non in fase di analisi.

Autorizzazioni

L'utente deve essere il proprietario della tabella o deve disporre dell'autorizzazione ALTER per la tabella.

Esempi

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.

USE AdventureWorks2022;  
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 'AdventureWorks2022.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  

Vedi anche

CREATE TABLE (Transact-SQL)
IDENTITY (Property) (Transact-SQL)
SCOPE_IDENTITY (Transact-SQL)
IN edizione Standard RT (Transact-SQL)
Istruzioni edizione Standard T (Transact-SQL)