Creazione e modifica di colonne identificatore

Per creare un numero di identificazione incrementato automaticamente in una tabella, è possibile utilizzare una colonna identificatore. È possibile creare una sola colonna identificatore e una sola colonna GUID per ogni tabella.

Proprietà IDENTITY

È possibile implementare colonne identificatore utilizzando la proprietà IDENTITY. Ciò consente allo sviluppatore di specificare sia un valore Identity per la prima riga inserita nella tabella (valore di inizializzazione Identity), sia un incremento (incremento valore Identity) da aggiungere al valore di inizializzazione per determinare i successivi valori Identity. Quando vengono inseriti valori in una tabella con un colonna identificatore, Motore di database genera automaticamente il successivo valore Identity sommando l'incremento al valore di inizializzazione. Quando si aggiungono colonne identificatore a tabelle esistenti, alle righe esistenti della tabella vengono aggiunti valori Identity e i valori di inizializzazione e di incremento vengono applicati nell'ordine in cui sono state aggiunte le righe in origine. Vengono inoltre generati valori Identity per tutte le nuove righe aggiunte. Non è possibile modificare una colonna di tabella esistente per aggiungervi la proprietà IDENTITY.

Quando si utilizza la proprietà IDENTITY per definire una colonna identificatore, considerare quanto segue:

  • Per una tabella può essere definita una sola colonna con la proprietà IDENTITY e tale colonna deve essere definita utilizzando un tipo di dati decimal, int, numeric, smallint, bigint o tinyint.

  • È possibile specificare il valore di inizializzazione e l'incremento. Il valore predefinito per entrambi è 1.

  • La colonna identificatore non deve consentire valori Null e non deve includere una definizione o un oggetto DEFAULT.

  • È possibile fare riferimento alla colonna in un elenco di selezione utilizzando la parola chiave $IDENTITY dopo avere impostato la proprietà IDENTITY. È inoltre possibile fare riferimento alla colonna con il nome.

  • È possibile utilizzare la funzione OBJECTPROPERTY per determinare se in una tabella è disponibile una colonna IDENTITY ed è possibile utilizzare la funzione COLUMNPROPERTY per determinare il nome della colonna IDENTITY.

  • È possibile utilizzare SET IDENTITY_INSERT per disabilitare la proprietà IDENTITY di una colonna consentendo l'inserimento esplicito dei valori.

    Nota

    Se esiste una colonna identificatore in una tabella in cui vengono eseguite spesso eliminazioni, è possibile che la sequenza di valori Identity presenti interruzioni. I valori Identity eliminati non vengono riutilizzati. Per evitare queste interruzioni, non utilizzare la proprietà IDENTITY. In alternativa è possibile creare un trigger che determini un nuovo valore identificatore in base ai valori esistenti nella colonna identificatore man mano che vengono inserite righe.

Identificatori univoci globali

Sebbene la proprietà IDENTITY automatizzi la numerazione delle righe all'interno di una tabella, è possibile che tabelle distinte, ognuna con la propria colonna identificatore, generino gli stessi valori. L'univocità della proprietà IDENTITY è infatti garantita soltanto per la tabella nella quale viene utilizzata. Se si desidera che un'applicazione generi una colonna identificatore univoca in tutto il database o in tutti i database presenti in ogni computer in rete nel mondo, utilizzare il tipo di dati uniqueidentifier e la funzione NEWID o NEWSEQUENTIALID(). È inoltre possibile applicare la proprietà ROWGUIDCOL per indicare che la nuova colonna è una colonna GUID riga. A differenza delle colonne definite con la proprietà IDENTITY, il Motore di database non genera automaticamente valori per una colonna di tipo uniqueidentifier. Per inserire un valore univoco globale, creare una definizione DEFAULT nella colonna che utilizza la funzione NEWID o NEWSEQUENTIALID per generare un valore univoco globale. Per ulteriori informazioni, vedere Utilizzo del tipo di dati uniqueidentifier.

È possibile fare riferimento a una colonna associata alla proprietà ROWGUICOL in un elenco di selezione utilizzando la parola chiave $ROWGUID. Questa operazione è simile al metodo che consente di fare riferimento a una colonna IDENTITY utilizzando la parola chiave $IDENTITY. Una tabella può contenere una sola colonna ROWGUIDCOL e tale colonna deve essere definita utilizzando il tipo di dati uniqueidentifier. È possibile utilizzare la funzione OBJECTPROPERTY (Transact-SQL) per determinare se una tabella dispone di una colonna ROWGUIDCOL e la funzione COLUMNPROPERTY (Transact-SQL) per determinare il nome della colonna ROWGUIDCOL.

Nell'esempio seguente viene creata una tabella con una colonna di tipo uniqueidentifier come chiave primaria. Nell'esempio viene utilizzata la funzione NEWSEQUENTIALID() nel vincolo DEFAULT per fornire valori per nuove righe. La proprietà ROWGUIDCOL viene applicata alla colonna di tipo uniqueidentifier in modo da potervi fare riferimento tramite la parola chiave $ROWGUID.

CREATE TABLE dbo.Globally_Unique_Data
    (guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
    Employee_Name varchar(60)
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );

Per creare una nuova colonna identificatore quando si crea una tabella

CREATE TABLE (Transact-SQL)

Per creare una nuova colonna identificatore in una tabella esistente

ALTER TABLE (Transact-SQL)

Per eliminare una colonna identificatore

ALTER TABLE (Transact-SQL)

Procedura: Eliminazione di colonne da una tabella (Visual Database Tools)

Per ottenere informazioni sulle colonne Identity

sys.identity_columns (Transact-SQL)

IDENT_INCR (Transact-SQL)

IDENT_SEED (Transact-SQL)

Per verificare e correggere il valore Identity corrente per una tabella specificata

DBCC CHECKIDENT (Transact-SQL)

Per impostare un nuovo valore di inizializzazione

DBCC CHECKIDENT (Transact-SQL)