Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Database SQL in Microsoft Fabric
Usando questa istruzione, puoi inserire valori espliciti nella IDENTITY colonna di una tabella.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
Argomenti
database_name
Il nome del database in cui risiede la tabella specificata.
schema_name
Il nome dello schema che contiene 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 ha già impostato questa proprietà su ON, e si emette un'istruzione SET IDENTITY_INSERT ON per un'altra tabella, SQL Server restituisce un messaggio di errore che dichiara SET IDENTITY_INSERT già ONè , e riporta la tabella per cui ON è impostato.
- Quando l'argomento
incrementdella IDENTITY funzione è positivo e il valore inserito è maggiore del valore identità corrente della tabella, SQL motore di database utilizza automaticamente il nuovo valore inserito come valore identità corrente. - Quando l'argomento
incrementdella IDENTITY funzione è negativo e il valore inserito è minore del valore identità corrente della tabella, SQL Server utilizza automaticamente il nuovo valore inserito come valore identità 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
Devi possedere il tavolo o avere ALTER il permesso di esserlo.
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 precedente INSERT restituisce il seguente errore:
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