ALTER TABLE (SQL Server Compact)
Consente di modificare una definizione di tabella modificando, aggiungendo o eliminando colonne e vincoli.
Sintassi
ALTER TABLE table_name
ALTER COLUMN column_name
{
type_name[({precision[.scale]})][NULL|NOT NULL]
{DROP DEFAULT
| SET DEFAULT constant_expression
| IDENTITY [ ( seed , increment ) ]
}
| ADD
{ < column_definition > | < table_constraint > } [ ,...n ]
| DROP
{ [ CONSTRAINT ] constraint_name
| COLUMN column }
] }
< column_definition > ::=
{ column_name data_type }
[ [ DEFAULT constant_expression ]
| IDENTITY [ ( seed , increment ) ]
]
[ROWGUIDCOL]
[ < column_constraint > ] [ ...n ] ]
< column_constraint > ::=
[ NULL | NOT NULL ]
[ CONSTRAINT constraint_name ]
{
| { PRIMARY KEY | UNIQUE }
| REFERENCES ref_table [ (ref_column) ]
[ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ]
[ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ]
}
< table_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
{ ( column [ ,...n ] ) }
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES ref_table [ (ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ]
[ ON UPDATE { CASCADE | NO ACTION | SET DEFAULT |SET NULL } ]
}
Argomenti
table_name
Nome della tabella da modificare.Nota
I nomi delle tabelle devono essere conformi alle regole relative agli identificatori. Il valore table_name deve essere univoco all'interno del database. e può contenere un massimo di 128 caratteri.
- ALTER COLUMN
Consente di specificare che è necessario cambiare o modificare una determinata colonna.
- column_name
Nome di una colonna della tabella. I nomi delle colonne devono essere conformi alle regole relative agli identificatori e devono essere univoci nella tabella.
- data_type
Consente di specificare il tipo di dati della colonna. Per ulteriori informazioni sui tipi di dati, vedere Tipi di dati.
- DEFAULT
Consente di specificare il valore impostato per la colonna quando non viene indicato in modo esplicito alcun valore durante un'operazione di inserimento. Le definizioni DEFAULT possono essere applicate a qualsiasi colonna, tranne quelle definite dalla proprietà IDENTITY. Le definizioni DEFAULT vengono rimosse quando si elimina la tabella. È possibile utilizzare come definizione DEFAULT solo un valore costante, ad esempio una stringa di tipo carattere o una funzione di data.
- IDENTITY
Indica che la nuova colonna è una colonna Identity. Quando si aggiunge una nuova riga alla tabella, Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5) specifica un valore incrementale per la colonna. Le colonne Identity vengono in genere utilizzate insieme ai vincoli PRIMARY KEY per fungere da identificatore di riga univoco per la tabella. La proprietà IDENTITY può essere assegnata solo alle colonne int. È possibile creare una sola colonna Identity per tabella. Le impostazioni predefinite associate e i vincoli DEFAULT non possono essere utilizzate con una colonna Identity. È necessario specificare sia il valore di inizializzazione che l'incremento oppure nessuno dei due valori. In questo secondo caso, il valore predefinito è (1,1).
- seed
Valore utilizzato per la prima riga caricata nella tabella.
- increment
Valore incrementale aggiunto al valore Identity della riga caricata in precedenza.
- ADD
Consente di specificare l'aggiunta di una o più definizioni di colonna o di vincoli di tabella.
- DROP { [CONSTRAINT] constraint_name| COLUMN column}
Consente di specificare che è necessario rimuovere constraint_name o column_name dalla tabella.
ROWGUIDCOL
Indica che la nuova colonna è una colonna identificatore univoco globale di riga. È possibile impostare una sola colonna uniqueidentifier per tabella come colonna ROWGUIDCOL. È possibile assegnare la proprietà ROWGUIDCOL solo a una colonna uniqueidentifier.I valori per le nuove righe inserite nella tabella vengono automaticamente generati da ROWGUIDCOL.
- NULL | NOT NULL
Parole chiave che permettono di specificare se nella colonna sono consentiti i valori Null. Sebbene NULL non sia propriamente un vincolo, può tuttavia essere specificato allo stesso modo di NOT NULL.
- CONSTRAINT
Parola chiave facoltativa che indica l'inizio di una definizione per un vincolo PRIMARY KEY, UNIQUE o FOREIGN KEY. I vincoli sono proprietà speciali che consentono di mantenere l'integrità dei dati e di creare speciali tipi di indici per la tabella e le relative colonne.
- constraint_name
Nome di un vincolo. Il valore constraint_name è facoltativo e deve essere univoco all'interno di un database. Se non si specifica alcun constraint_name, il nome del vincolo viene generato da SQL Server Compact 3.5.
- PRIMARY KEY
Vincolo che impone l'integrità di entità per una o più colonne specifiche mediante un indice univoco. È possibile creare un solo vincolo PRIMARY KEY per tabella.
UNIQUE
Vincolo che fornisce l'integrità di entità per una o più colonne specifiche mediante un indice univoco. Le colonne di un vincolo UNIQUE possono avere valore NULL, ma è consentito un solo valore NULL per colonna. A una tabella possono essere applicati più vincoli UNIQUE.Nota
SQL Server Compact 3.5 consente di utilizzare gli indici per imporre i vincoli PRIMARY KEY e UNIQUE. È tuttavia consigliabile evitare di ricorrere a questa funzionalità e di modificare gli indici creati come parte di un vincolo.
- FOREIGN KEY...REFERENCES
Vincolo che fornisce integrità referenziale per i dati della colonna. I vincoli FOREIGN KEY richiedono che ogni valore della colonna esista nella colonna specificata nella tabella con riferimenti.
- ref_table
Nome della tabella a cui fa riferimento il vincolo FOREIGN KEY.
- ( ref_column [ ,... n] )
Colonna o elenco di colonne della tabella a cui fa riferimento il vincolo FOREIGN KEY.
- ON DELETE {CASCADE | NO ACTION |SET DEFAULT | SET NULL}
Consente di specificare quale operazione viene eseguita in una riga della tabella creata quando tale riga dispone di una relazione referenziale e la riga con riferimenti viene eliminata dalla tabella padre. L'impostazione predefinita è NO ACTION. Per ulteriori informazioni, vedere la sezione "Osservazioni" più avanti in questo argomento.
- ON UPDATE {CASCADE | NO ACTION | SET DEFAULT | SET NULL}
Consente di specificare quale operazione viene eseguita in una riga della tabella creata quando tale riga dispone di una relazione referenziale e la riga con riferimenti viene aggiornata nella tabella padre. L'impostazione predefinita è NO ACTION. Per ulteriori informazioni, vedere la sezione "Osservazioni" più avanti in questo argomento.
- column
Colonna o elenco di colonne, tra parentesi, utilizzato nei vincoli della tabella per indicare le colonne utilizzate nella definizione del vincolo.
- n
Segnaposto che indica che è possibile ripetere l'elemento precedente per n volte.
Osservazioni
Per ON DELETE o ON UPDATE, se è specificata l'opzione CASCADE, la riga viene aggiornata nella tabella di riferimento se nella tabella padre viene aggiornata la corrispondente riga con riferimenti. Se viene specificato NO ACTION, SQL Server Compact 3.5 restituisce un errore e viene eseguito il rollback dell'operazione di aggiornamento nella riga con riferimenti della tabella padre.
Si supponga ad esempio di disporre di un database con due tabelle, A e B. La tabella A ha una relazione referenziale con la tabella B, ovvero la chiave esterna A.ItemID fa riferimento alla chiave primaria B.ItemID.
Se si esegue un'istruzione UPDATE su una riga della tabella B e si specifica un'operazione ON UPDATE CASCADE per A.ItemID, SQL Server Compact 3.5 cercherà una o più righe dipendenti nella tabella A. Se esistono, le righe dipendenti nella tabella A vengono aggiornate, come la riga a cui si fa riferimento nella tabella B.
In alternativa, se si specifica NO ACTION, SQL Server Compact 3.5 restituisce un errore e viene eseguito il rollback dell'operazione di aggiornamento nella riga con riferimenti della tabella B quando nella tabella A esiste almeno una riga che vi fa riferimento.
Esempi di codice
A. Modifica dei valori di inizializzazione e di incremento nella colonna Identity
Nell'esempio seguente vengono modificati i valori di inizializzazione e di incremento nella colonna Identity.
CREATE TABLE MyCustomers (CustID INTEGER IDENTITY (100,1) PRIMARY KEY, CompanyName NvarChar (50));
INSERT INTO MyCustomers (CompanyName) VALUES ('A. Datum Corporation');
ALTER TABLE MyCustomers ALTER COLUMN CustId IDENTITY (200, 2);
B. Aggiunta di un valore predefinito a una colonna
Nell'esempio seguente la colonna CompanyName viene modificata in modo che contenga un valore predefinito.
ALTER TABLE MyCustomers ALTER COLUMN CompanyName SET DEFAULT 'A. Datum Corporation'
C. Eliminazione di un valore predefinito dalla colonna
Nell'esempio seguente la colonna CompanyName viene modificata in modo che non contenga un valore predefinito.
ALTER TABLE MyCustomers ALTER COLUMN CompanyName DROP DEFAULT