Share via


column_definition (Transact-SQL)

Specifica le proprietà di una colonna che viene aggiunta a una tabella tramite ALTER TABLE.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

column_name [ type_schema_name. ] type_name
    [ 
                ( { precision [ , scale ] | max | 
            [ { CONTENT | DOCUMENT } ] xml_schema_collection } ) 
    ] 
    [ FILESTREAM ]
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression 
             [ WITH VALUES ] 
        | IDENTITY [ (seed , increment ) ] [ NOT FOR REPLICATION ] 
    ] 
    [ ROWGUIDCOL ] 
    [ COLLATE < collation_name > ] 
    [ <column_constraint> [ ...n ] ] 

Argomenti

  • column_name
    Nome della colonna da modificare, aggiungere o eliminare. column_name può contenere da 1 a 128 caratteri. Nel caso di nuove colonne create con il tipo di dati timestamp è possibile omettere l'argomento 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 di Microsoft .NET Framework e lo schema a cui appartiene. Per poter essere utilizzato in una definizione di tabella, un tipo di dati definito dall'utente 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.

  • scale
    Scala del 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 schemi XML 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 e non è possibile modificare i vincoli correlati quando per la tabella è stata definita una colonna FILESTREAM. La colonna ROWGUIDCOL viene 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 Introduzione all'archiviazione FILESTREAM.

  • [ CONSTRAINT constraint_name ]
    Specifica l'inizio di una definizione DEFAULT. Per garantire la compatibilità con 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, con l'eccezione che il nome non può iniziare con un simbolo di 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, il tipo deve supportare la conversione implicita da constant_expression nel tipo definito dall'utente.

  • 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 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). Non è possibile modificare una colonna della tabella esistente per aggiungere la proprietà IDENTITY.

    Nota

    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 sono 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. Per ulteriori informazioni, vedere Controllo di vincoli, identità e trigger con l'opzione NOT FOR REPLICATION.

  • 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.

    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 in istruzioni INSERT oppure specificare la funzione NEWID come valore predefinito della colonna. Per ulteriori informazioni, vedere NEWID (Transact-SQL) e INSERT (Transact-SQL).

  • 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).

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.

Esempi

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