Condividi tramite


SET IDENTITY_INSERT (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsDatabase SQL in Microsoft Fabric

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 in cui risiede la tabella specificata.

schema_name

Nome dello schema a cui appartiene la tabella.

table_name

Nome di una tabella con una colonna Identity.

Osservazioni:

In qualsiasi momento, solo una tabella di una sessione può avere la proprietà IDENTITY_INSERT impostata su ON. Se una tabella dispone già di questa proprietà impostata su ONe viene generata un'istruzione SET IDENTITY_INSERT ON per un'altra tabella, SQL Server restituisce un messaggio di errore che indica che SET IDENTITY_INSERT è già ONe segnala la tabella per cui è impostato ON.

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'impostazione di SET IDENTITY_INSERT viene impostata in fase di esecuzione o in fase di esecuzione e non in fase di analisi.

Autorizzazioni

L'utente deve essere proprietario della tabella o 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

Creare una tabella degli strumenti.

CREATE TABLE dbo.Tool
(
    ID INT IDENTITY NOT NULL PRIMARY KEY,
    Name VARCHAR (40) NOT NULL
);
GO

Inserire valori nella tabella products.

INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
    ('Hammer'),
    ('Saw'),
    ('Shovel');
GO

Creare un gap nei valori Identity.

DELETE dbo.Tool
WHERE Name = 'Saw';
GO

SELECT *
FROM dbo.Tool;
GO

Provare a inserire un valore ID esplicito pari a 3.

INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO

Il codice INSERT precedente deve restituire l'errore seguente:

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.

Impostare IDENTITY_INSERT su ON.

SET IDENTITY_INSERT dbo.Tool ON;
GO

Provare a inserire un valore ID esplicito pari a 3.

INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO

SELECT *
FROM dbo.Tool;
GO

Eliminare la tabella degli strumenti.

DROP TABLE dbo.Tool;
GO