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 relative alla sintassi Transact-SQL

Sintassi

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

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 tool table.  
DROP TABLE dbo.Tool;  
GO  

Vedi anche

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