SET IDENTITY_INSERT (Transact-SQL)
Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure 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