Condividi tramite


column_definition (Transact-SQL)

Specifica le proprietà di una colonna che vengono aggiunte a una tabella tramite ALTER TABLE.

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

Sintassi

column_name <data_type>
    [ FILESTREAM ]
    [ COLLATE collation_name ] 
    [ NULL | NOT NULL ]
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression [ WITH VALUES ] 
      | IDENTITY [ ( seed , increment ) ] [ NOT FOR REPLICATION ] 
    ]
    [ ROWGUIDCOL ] 
    [ SPARSE ] 
    [ <column_constraint> [ ...n ] ]

<data type> ::= 
[ type_schema_name . ] type_name 
    [ ( precision [ , scale ] | max | 
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ] 

<column_constraint> ::= 
[ CONSTRAINT constraint_name ] 
{     { PRIMARY KEY | UNIQUE } 
        [ CLUSTERED | NONCLUSTERED ] 
        [ 
            WITH FILLFACTOR = fillfactor  
          | WITH ( < index_option > [ , ...n ] ) 
        ] 
        [ ON { partition_scheme_name ( partition_column_name ) 
            | filegroup | "default" } ]
  | [ FOREIGN KEY ] 
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ NOT FOR REPLICATION ] 
  | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) 
} 

Argomenti

  • column_name
    Nome della colonna da modificare, aggiungere o eliminare. column_name può essere costituito da un numero di caratteri compreso tra 1 e 128. Nel caso di nuove colonne create con il tipo di dati timestamp, è possibile omettere column_name. Se column_name viene omesso per una colonna di tipo timestamp, viene utilizzato il nome timestamp.

  • [ type_schema_name**.** ] type_name
    Tipo di dati della colonna che viene aggiunta e dello schema a cui appartiene.

    I possibili valori per type_name sono i seguenti:

    • Tipo di dati di sistema di Microsoft SQL Server.

    • Tipo di dati alias basato su un tipo di dati di sistema di SQL Server. Per poter essere utilizzati in una definizione di tabella, i tipi di dati alias devono venire creati tramite CREATE TYPE.

    • Tipo definito dall'utente (UDT) di Microsoft .NET Framework e lo schema a cui appartiene. Per poter essere utilizzato in una definizione di tabella, un tipo definito dall'utente (UDT) di .NET Framework deve venire creato tramite CREATE TYPE.

    Se type_schema_name viene omesso, Microsoft Motore di database fa riferimento a type_name in base all'ordine seguente:

    • Tipo di dati di sistema di SQL Server.

    • Schema predefinito dell'utente corrente nel database corrente.

    • Schema dbo nel database corrente.

  • precision
    Precisione del tipo di dati specificato. Per ulteriori informazioni sui valori di precisione validi, vedere Precisione, scala e lunghezza (Transact-SQL).

  • scale
    Scala per il tipo di dati specificato. Per ulteriori informazioni sui valori di scala validi, vedere Precisione, scala e lunghezza (Transact-SQL).

  • max
    Si applica solo ai tipi di dati varchar, nvarchar e varbinary. Vengono utilizzati per l'archiviazione di 2^31 byte di dati di tipo carattere e binari e 2^30 byte di dati Unicode.

  • CONTENT
    Specifica che ogni istanza del tipo di dati xml in column_name può contenere più elementi di livello principale. CONTENT si applica solo al tipo di dati xml e può essere specificato solo se viene specificato anche xml_schema_collection. Se viene omesso, per impostazione predefinita viene utilizzato CONTENT.

  • DOCUMENT
    Specifica che ogni istanza del tipo di dati xml in column_name può contenere un solo elemento di livello principale. DOCUMENT si applica solo al tipo di dati xml e può essere specificato solo se viene specificato anche xml_schema_collection.

  • xml_schema_collection
    Si applica solo al tipo di dati xml per associare una raccolta di XML Schema al tipo. Per poter digitare una colonna xml in uno schema, è necessario creare lo schema nel database utilizzando CREATE XML SCHEMA COLLECTION.

  • FILESTREAM
    Facoltativamente specifica l'attributo di archiviazione FILESTREAM per la colonna che dispone di un type_name di varbinary(max).

    Quando viene specificato FILESTREAM per una colonna, la tabella deve avere anche una colonna per i tipo di dati uniqueidentifier che dispone dell'attributo ROWGUIDCOL. Questa colonna non deve consentire valori Null e deve avere un vincolo a colonna singola UNIQUE o PRIMARY KEY. Il valore GUID per la colonna deve essere fornito da un'applicazione all'inserimento dei dati o da un vincolo DEFAULT che utilizza la funzione NEWID ().

    Non è possibile eliminare la colonna ROWGUIDCOL, né modificare i vincoli correlati quando per la tabella è stata definita una colonna FILESTREAM. La colonna ROWGUIDCOL può essere eliminata solo dopo l'eliminazione dell'ultima colonna FILESTREAM.

    Quando l'attributo di archiviazione FILESTREAM viene specificato per una colonna, tutti i valori per quella colonna vengono archiviati in un contenitore di dati FILESTREAM nel file system.

    Per un esempio che illustri come utilizzare la definizione di colonna, vedere FILESTREAM (SQL Server).

  • COLLATE collation_name
    Specifica le regole di confronto per la colonna. Se viene omesso, alla colonna vengono assegnate le regole di confronto predefinite del database. È possibile utilizzare nomi di regole di confronto di Windows o SQL. Per un elenco e ulteriori informazioni, vedere Windows_collation_name (Transact-SQL) e Nome delle regole di confronto di SQL Server (Transact-SQL).

    La clausola COLLATE consente di specificare le regole di confronto solo per colonne di tipo char, varchar, nchar e nvarchar.

    Per ulteriori informazioni sulla clausola COLLATE, vedere COLLATE (Transact-SQL).

  • NULL | NOT NULL
    Determina se i valori Null sono supportati nella colonna. L'opzione NULL non è esattamente un vincolo, ma può essere specificata allo stesso modo di NOT NULL.

  • [ CONSTRAINT constraint_name ]
    Specifica l'inizio di una definizione del valore DEFAULT. Per garantire la compatibilità con le versioni precedenti di SQL Server, è possibile assegnare un nome di vincolo a una definizione DEFAULT. constraint_name deve essere conforme alle regole per gli identificatori, ad eccezione del nome che non può iniziare con un cancelletto (#). Se constraint_name viene omesso, alla definizione DEFAULT viene assegnato un nome generato dal sistema.

  • DEFAULT
    Parola chiave che specifica il valore predefinito della colonna. Le definizioni DEFAULT possono essere utilizzate per assegnare valori a una nuova colonna nelle righe di dati esistenti. Le definizioni DEFAULT non possono essere applicate alle colonne di tipo timestamp o alle colonne con una proprietà IDENTITY. Se si specifica un valore predefinito per una colonna di tipo definito dall'utente (UDT), il tipo deve supportare la conversione implicita da constant_expression nel tipo definito dall'utente (UDT).

  • constant_expression
    Valore letterale, valore Null o funzione di sistema utilizzati come valore predefinito della colonna. Se utilizzata insieme a una colonna definita come tipo definito dall'utente (UDT) di .NET Framework, l'implementazione del tipo deve supportare una conversione implicita da constant_expression nel tipo definito dall'utente.

  • WITH VALUES
    Specifica che il valore assegnato alla parola chiave DEFAULT constant_expression viene archiviato in una nuova colonna aggiunta alle righe esistenti. Se la colonna aggiunta ammette valori Null e viene specificata la clausola WITH VALUES, il valore predefinito viene archiviato nella nuova colonna aggiunta alle righe esistenti. Se per le colonne che ammettono valori Null la clausola WITH VALUES non viene specificata, il valore NULL viene archiviato nella nuova colonna nelle righe esistenti. Se la nuova colonna non ammette valori Null, il valore predefinito viene archiviato nelle nuove righe, indipendentemente dal fatto che la clausola WITH VALUES sia o meno specificata.

  • IDENTITY
    Specifica che la nuova colonna è una colonna Identity. Il Motore di database di SQL Server fornisce un valore univoco incrementale per la colonna. Quando si aggiungono colonne identificatore alle tabelle esistenti, alle righe esistenti della tabella vengono aggiunti i valori Identity con i valori di inizializzazione e di incremento. L'ordine con cui le righe vengono aggiornate non è prevedibile. Vengono inoltre generati valori Identity per qualsiasi nuova riga aggiunta.

    Le colonne Identity vengono comunemente utilizzate in combinazione con vincoli PRIMARY KEY per fungere da identificatore di riga univoco per la tabella. La proprietà IDENTITY può essere assegnata a una colonna tinyint, smallint, int, bigint, decimal(p,0) o numeric(p,0). Ogni tabella può includere una sola colonna Identity. Per una colonna Identity inoltre non è possibile utilizzare la parola chiave DEFAULT con associati valori predefiniti. È necessario specificare sia il valore di inizializzazione che l'incremento oppure nessuno dei due valori. Nel secondo caso il valore predefinito è (1,1).

    [!NOTA]

    Non è possibile modificare una colonna della tabella esistente per aggiungere la proprietà IDENTITY.

    Non è possibile aggiungere una colonna Identity a una tabella pubblicata perché questo può impedire la convergenza quando le colonne vengono replicate nel Sottoscrittore. I valori della colonna Identity nel server di pubblicazione dipendono dall'ordine in cui vengono fisicamente archiviate le righe della tabella interessata. Le righe possono essere archiviate in modo diverso nel Sottoscrittore, pertanto il valore della colonna Identity può essere diverso per le stesse righe.

    Per disabilitare la proprietà IDENTITY di una colonna consentendo l'inserimento esplicito dei valori, utilizzare SET IDENTITY_INSERT.

  • seed
    Valore utilizzato per la prima riga caricata nella tabella.

  • increment
    Valore incrementale aggiunto al valore Identity della riga precedente caricata.

  • NOT FOR REPLICATION
    Può essere specificato per la proprietà IDENTITY. Se si specifica questa clausola per la proprietà IDENTITY, i valori non vengono incrementati nelle colonne Identity quando gli agenti di replica eseguono operazioni di inserimento.

  • ROWGUIDCOL
    Specifica che la colonna è una colonna GUID di riga. È possibile assegnare ROWGUIDCOL solo a una colonna uniqueidentifier ed è possibile designare come colonna ROWGUIDCOL una sola colonna uniqueidentifier per tabella. Non è possibile assegnare ROWGUIDCOL a colonne di tipo definito dall'utente (UDT).

    La proprietà ROWGUIDCOL non impone l'univocità dei valori archiviati nella colonna. Inoltre non genera automaticamente valori per le nuove righe inserite nella tabella. Per generare valori univoci per ogni colonna, è necessario utilizzare la funzione NEWID con istruzioni INSERT o specificare la funzione NEWID come valore predefinito della colonna. Per ulteriori informazioni, vedere NEWID (Transact-SQL) e INSERT (Transact-SQL).

  • SPARSE
    Indica che la colonna è di tipo sparse. L'archiviazione delle colonne di tipo sparse è ottimizzata per valori Null. Non è possibile designare le colonne di tipo sparse come NOT NULL. Per ulteriori restrizioni e informazioni relative alle colonne di tipo sparse, vedere Utilizzo di colonne di tipo sparse.

  • <column_constraint>
    Per le definizioni degli argomenti di vincolo di colonna, vedere column_constraint (Transact-SQL).

Osservazioni

Se viene aggiunta una colonna di tipo uniqueidentifier, è possibile definirla con un valore predefinito che utilizza la funzione NEWID() per l'inserimento dei valori di identificatore univoco nella nuova colonna per ogni riga della tabella.

In Motore di database non è previsto un ordine specifico per DEFAULT, IDENTITY, ROWGUIDCOL o vincoli di colonna in una definizione di colonna.

L'istruzione ALTER TABLE avrà esito negativo se, a seguito dell'aggiunta della colonna, la dimensione della riga di dati supererà 8060 byte.

Esempi

Per gli esempi, vedere ALTER TABLE (Transact-SQL).

Vedere anche

Riferimento

ALTER TABLE (Transact-SQL)