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 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 ON
e 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à ON
e 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