Condividi tramite


SET IDENTITY_INSERT (Transact-SQL)

Consente l'inserimento di valori espliciti nella colonna Identity di una tabella.

Si applica a: SQL Server (SQL Server 2008 tramite versione corrente), Database SQL di Windows Azure (versione iniziale tramite versione corrente).

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • database_name
    Nome del database contenente la tabella specificata.

  • schema_name
    Nome dello schema a cui appartiene la tabella.

  • table
    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 indicata 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 AdventureWorks2012;
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 a warning.
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 products table.
DROP TABLE dbo.Tool;
GO

Vedere anche

Riferimento

CREATE TABLE (SQL Server)

IDENTITY (proprietà) (Transact-SQL)

SCOPE_IDENTITY (Transact-SQL)

INSERT (Transact-SQL)

Istruzioni SET (Transact-SQL)