ALTER TABLE (Transact-SQL)
Modifica una definizione di tabella mediante la modifica, l'aggiunta o l'eliminazione di colonne e vincoli, la riassegnazione di partizioni, la disabilitazione o l'abilitazione di vincoli e trigger.
ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name
{
ALTER COLUMN column_name
{
[ type_schema_name. ] type_name [ ( { precision [ ,scale ]
| max | xml_schema_collection } ) ]
[ COLLATE collation_name ]
[ SPARSE | NULL | NOT NULL ]
| {ADD | DROP }
{ ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE }
}
| [ WITH { CHECK | NOCHECK } ]
| ADD
{
<column_definition>
| <computed_column_definition>
| <table_constraint>
| <column_set_definition>
} [ ,...n ]
| DROP
{
[ CONSTRAINT ] constraint_name
[ WITH ( <drop_clustered_constraint_option> [ ,...n ] ) ]
| COLUMN column_name
} [ ,...n ]
| [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
| { ENABLE | DISABLE } CHANGE_TRACKING
[ WITH ( TRACK_COLUMNS_UPDATED = { ON | OFF } ) ]
| SWITCH [ PARTITION source_partition_number_expression ]
TO target_table
[ PARTITION target_partition_number_expression ]
| SET ( FILESTREAM_ON = { partition_scheme_name | filegroup |
"default" | "NULL" } )
| REBUILD
[ [PARTITION = ALL]
[ WITH ( <rebuild_option> [ ,...n ] ) ]
| [ PARTITION = partition_number
[ WITH ( <single_partition_rebuild_option> [ ,...n ] ) ]
]
]
| (<table_option>)
}
[ ; ]
<column_set_definition> ::=
column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
<drop_clustered_constraint_option> ::=
{
MAXDOP = max_degree_of_parallelism | ONLINE = {ON | OFF }
| MOVE TO { partition_scheme_name (column_name) | filegroup
| "default" }
}
<table_option> ::=
{
SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )
}
<single_partition_rebuild__option> ::=
{
SORT_IN_TEMPDB = { ON | OFF }
| MAXDOP =max_degree_of_parallelism
| DATA_COMPRESSION = { NONE | ROW | PAGE} }
}
Per aggiungere nuove righe di dati, utilizzare INSERT. Per rimuovere righe di dati, utilizzare DELETE o TRUNCATE TABLE. Per modificare i valori nelle righe esistenti, utilizzare UPDATE.
Se la cache delle procedure include piani di esecuzione che fanno riferimento alla tabella, l'istruzione ALTER TABLE li contrassegna per la ricompilazione durante l'esecuzione successiva.
Modifica delle dimensioni di una colonna
È possibile modificare la lunghezza, la precisione o la scala di una colonna specificando nuove dimensioni per il tipo di dati della colonna nella clausola ALTER COLUMN. Se nella colonna sono presenti dati, le nuove dimensioni non possono essere minori delle dimensioni massime dei dati. La colonna non può inoltre essere definita in un indice, tranne nel caso in cui il tipo di dati della colonna sia varchar, nvarchar o varbinary e l'indice sia diverso dal risultato di un vincolo PRIMARY KEY. Vedere l'esempio P.
Blocchi e ALTER TABLE
Le modifiche specificate in ALTER TABLE vengono implementate immediatamente. Se le modifiche richiedono l'alterazione delle righe nella tabella, le righe vengono aggiornate tramite ALTER TABLE. ALTER TABLE acquisisce un blocco di modifica dello schema (SCH-M) sulla tabella per verificare che durante la modifica nessun'altra connessione faccia riferimento ai dati o ai metadati della tabella, ad eccezione delle operazioni sugli indici in linea al termine delle quali è richiesto un blocco SCH-M molto breve. In un'operazione ALTER TABLE…SWITCH il blocco viene acquisito sia sulle tabelle di origine che su quelle di destinazione. Le modifiche apportate alla tabella vengono registrate e possono essere recuperate completamente. Le modifiche che influiscono su tutte le righe di tabelle di grandi dimensioni, ad esempio l'eliminazione di una colonna o l'aggiunta di una colonna NOT NULL con valore predefinito, possono richiedere molto tempo e generare un elevato numero di record del log. Tali istruzioni ALTER TABLE devono essere eseguite con la stessa attenzione dedicata alle istruzioni INSERT, UPDATE o DELETE quando queste influiscono su molte righe.
Esecuzione di piani paralleli
In SQL Server 2008 Enterprise Edition il numero di processori utilizzati per eseguire un'unica istruzione ALTER TABLE ADD (basata su indici) CONSTRAINT o DROP (indice cluster) CONSTRAINT viene determinato dall'opzione di configurazione max degree of parallelism e dal carico di lavoro corrente. Se il Motore di database rileva che il sistema è occupato, il grado di parallelismo dell'operazione viene ridotto automaticamente prima dell'avvio dell'esecuzione dell'istruzione. È possibile configurare manualmente il numero di processori utilizzati per eseguire l'istruzione mediante l'opzione MAXDOP.
Tabelle partizionate
Oltre all'esecuzione di operazioni SWITCH che interessano tabelle partizionate, è possibile utilizzare ALTER TABLE per modificare lo stato di colonne, vincoli e trigger di tali tabelle così come per le tabelle non partizionate. Non è tuttavia possibile utilizzare questa istruzione per modificare il modo di partizione della tabella stessa. Per partizionare di nuovo una tabella partizionata, utilizzare ALTER PARTITION SCHEME e ALTER PARTITION FUNCTION. Non è inoltre possibile modificare il tipo di dati di una colonna di una tabella partizionata.
Restrizioni per le tabelle con viste associate a schema
Le restrizioni che si applicano a istruzioni ALTER TABLE eseguite su tabelle con viste associate a schema sono le stesse che vengono applicate alla modifica di tabelle con un indice semplice. È possibile aggiungere una colonna mentre non è consentito rimuovere o modificare una colonna che fa parte di una vista associata a schema. Se l'istruzione ALTER TABLE richiede la modifica di una colonna utilizzata in una vista associata allo schema, ALTER TABLE ha esito negativo e Motore di database genera un messaggio di errore. Per ulteriori informazioni sull'associazione di schema e sulle viste indicizzate, vedere CREATE VIEW (Transact-SQL).
La creazione di una vista associata a schema che fa riferimento a tabelle di base non influisce sull'aggiunta o sulla rimozione di trigger in tali tabelle.
Indici e ALTER TABLE
Gli indici creati nell'ambito di un vincolo vengono eliminati con l'eliminazione del vincolo. Gli indici creati mediante CREATE INDEX devono essere eliminati mediante DROP INDEX. È possibile utilizzare l'istruzione ALTER INDEX per ricompilare un indice che costituisce una parte di una definizione di vincolo. Non è necessario eliminare e quindi aggiungere nuovamente il vincolo con ALTER TABLE.
Tutti gli indici e i vincoli basati su una colonna devono essere rimossi prima della rimozione della colonna.
Quando si elimina un vincolo con cui è stato creato un indice cluster, le righe di dati archiviate a livello foglia nell'indice cluster vengono archiviate in una tabella non cluster. È possibile eliminare l'indice cluster e spostare la tabella risultante in un altro filegroup o schema di partizione in una singola transazione specificando l'opzione MOVE TO. Per l'opzione MOVE TO vengono applicate le seguenti restrizioni:
-
MOVE TO non può essere utilizzata per viste indicizzate o indici non cluster.
-
Lo schema di partizione o il filegroup deve essere già esistente.
-
Se non si specifica MOVE TO, la tabella viene inserita nello stesso schema di partizione o nello stesso filegroup definito per l'indice cluster.
Quando si elimina un indice cluster, è possibile specificare l'opzione ONLINE = ON per evitare che la transazione DROP INDEX blocchi l'esecuzione di query e modifiche sui dati sottostanti e sugli indici non cluster associati.
Per l'opzione ONLINE = ON vengono applicate le seguenti restrizioni:
-
ONLINE = ON non è valida per gli indici cluster che sono inoltre disabilitati. Per l'eliminazione degli indici disabilitati è necessario utilizzare ONLINE = OFF.
-
È possibile eliminare un solo indice alla volta.
-
ONLINE = ON non è valida per viste indicizzate, indici non cluster o indici su tabelle temporanee locali.
Per l'eliminazione di un indice cluster, lo spazio su disco temporaneo deve essere uguale alle dimensioni dell'indice cluster esistente. Questo spazio aggiuntivo viene rilasciato al termine dell'operazione.
Nota
|
|---|
|
Le opzioni elencate in <drop_clustered_constraint_option> si applicano a indici cluster in tabelle e non possono essere applicate a indici cluster in viste o a indici non cluster. |
Replica delle modifiche dello schema
Per impostazione predefinita, quando si esegue ALTER TABLE su una tabella pubblicata in un server di pubblicazione SQL Server tale modifica viene propagata a tutti i Sottoscrittori SQL Server. Questa funzionalità presenta alcune restrizioni e può essere disabilitata. Per ulteriori informazioni, vedere Modifiche allo schema nei database di pubblicazione.
Compressione dei dati
Le tabelle di sistema non possono essere abilitate per la compressione. Se la tabella è un heap, l'operazione di ricompilazione per la modalità ONLINE sarà a thread singolo. Utilizzare la modalità OFFLINE per un'operazione di ricompilazione di heap multithread. Per ulteriori informazioni sulla compressione dei dati, vedere Creazione di tabelle e di indici compressi.
Per valutare il modo in cui la modifica dello stato di compressione influirà su una tabella, un indice o una partizione, utilizzare la stored procedure sp_estimate_data_compression_savings.
Alle tabelle partizionate vengono applicate le restrizioni seguenti:
-
Non è possibile modificare l'impostazione di compressione di una singola partizione se la tabella include indici non allineati.
-
La sintassi ALTER TABLE <tabella> REBUILD PARTITION ... consente di ricostruire la partizione specificata.
-
La sintassi ALTER TABLE <tabella> REBUILD WITH ... consente di ricompilare tutte le partizioni.
È necessario disporre dell'autorizzazione ALTER per la tabella.
Le autorizzazioni ALTER TABLE si applicano a entrambe le tabelle coinvolte in un'istruzione ALTER TABLE SWITCH. Tutti i dati trasferiti ereditano la protezione della tabella di destinazione.
Se nell'istruzione ALTER TABLE si definiscono colonne di tipo Common Language Runtime (CLR) definito dall'utente o di tipo alias, è necessaria l'autorizzazione REFERENCES per il tipo desiderato.
A. Aggiunta di una nuova colonna
Nell'esempio seguente viene aggiunta una colonna che ammette valori Null e che non include valori forniti mediante una definizione DEFAULT. In ogni riga della nuova colonna sarà indicato NULL.
CREATE TABLE dbo.doc_exa (column_a INT) ; GO ALTER TABLE dbo.doc_exa ADD column_b VARCHAR(20) NULL ; GO EXEC sp_help doc_exa ; GO DROP TABLE dbo.doc_exa ; GO
B. Eliminazione di una colonna
Nell'esempio seguente viene modificata una tabella rimuovendo una colonna.
CREATE TABLE dbo.doc_exb (column_a INT, column_b VARCHAR(20) NULL) ; GO ALTER TABLE dbo.doc_exb DROP COLUMN column_b ; GO EXEC sp_help doc_exb ; GO DROP TABLE dbo.doc_exb ; GO
C. Modifica del tipo di dati di una colonna
Nell'esempio seguente la colonna di una tabella viene modificata da INT a DECIMAL.
CREATE TABLE dbo.doc_exy (column_a INT ) ; GO INSERT INTO dbo.doc_exy (column_a) VALUES (10) ; GO ALTER TABLE dbo.doc_exy ALTER COLUMN column_a DECIMAL (5, 2) ; GO DROP TABLE dbo.doc_exy ; GO
D. Aggiunta di una colonna con un vincolo
Nell'esempio seguente viene aggiunta una nuova colonna con un vincolo UNIQUE.
CREATE TABLE dbo.doc_exc (column_a INT) ;
GO
ALTER TABLE dbo.doc_exc ADD column_b VARCHAR(20) NULL
CONSTRAINT exb_unique UNIQUE ;
GO
EXEC sp_help doc_exc ;
GO
DROP TABLE dbo.doc_exc ;
GO
E. Aggiunta di un vincolo CHECK non verificato a una colonna esistente
Nell'esempio seguente viene aggiunto un vincolo a una colonna esistente nella tabella. Nella colonna è presente un valore che viola il vincolo. Pertanto, viene utilizzato WITH NOCHECK per evitare che il vincolo venga convalidato in base alle righe esistenti e consentire l'aggiunta del vincolo.
CREATE TABLE dbo.doc_exd ( column_a INT) ; GO INSERT INTO dbo.doc_exd VALUES (-1) ; GO ALTER TABLE dbo.doc_exd WITH NOCHECK ADD CONSTRAINT exd_check CHECK (column_a > 1) ; GO EXEC sp_help doc_exd ; GO DROP TABLE dbo.doc_exd ; GO
F. Aggiunta di un vincolo DEFAULT a una colonna esistente
Nell'esempio seguente viene creata una tabella con due colonne e viene inserito un valore nella prima colonna mentre i valori nell'altra colonna rimangono NULL. Viene quindi aggiunto un vincolo DEFAULT alla seconda colonna. Per verificare l'applicazione del vincolo, viene inserito un altro valore nella prima colonna e viene eseguita una query sulla tabella.
CREATE TABLE dbo.doc_exz ( column_a INT, column_b INT) ; GO INSERT INTO dbo.doc_exz (column_a)VALUES ( 7 ) ; GO ALTER TABLE dbo.doc_exz ADD CONSTRAINT col_b_def DEFAULT 50 FOR column_b ; GO INSERT INTO dbo.doc_exz (column_a) VALUES ( 10 ) ; GO SELECT * FROM dbo.doc_exz ; GO DROP TABLE dbo.doc_exz ; GO
G. Aggiunta di più colonne con vincoli
Nell'esempio seguente vengono aggiunte più colonne con vincoli. I vincoli vengono definiti con la nuova colonna. Alla prima nuova colonna è associata la proprietà IDENTITY. Nella colonna Identity di ogni riga della tabella sono presenti nuovi valori incrementali.
CREATE TABLE dbo.doc_exe ( column_a INT CONSTRAINT column_a_un UNIQUE) ; GO ALTER TABLE dbo.doc_exe ADD -- Add a PRIMARY KEY identity column. column_b INT IDENTITY CONSTRAINT column_b_pk PRIMARY KEY, -- Add a column that references another column in the same table. column_c INT NULL CONSTRAINT column_c_fk REFERENCES doc_exe(column_a), -- Add a column with a constraint to enforce that -- nonnull data is in a valid telephone number format. column_d VARCHAR(16) NULL CONSTRAINT column_d_chk CHECK (column_d LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' OR column_d LIKE '([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'), -- Add a nonnull column with a default. column_e DECIMAL(3,3) CONSTRAINT column_e_default DEFAULT .081 ; GO EXEC sp_help doc_exe ; GO DROP TABLE dbo.doc_exe ; GO
H. Aggiunta di una colonna che ammette valori Null con valori predefiniti
Nell'esempio seguente viene aggiunta una colonna che ammette valori Null con una definizione DEFAULT e viene specificato WITH VALUES per l'assegnazione di valori a ogni riga della tabella. Se non si utilizza WITH VALUES, a ogni riga della nuova colonna viene associato il valore NULL.
USE AdventureWorks ; GO CREATE TABLE dbo.doc_exf ( column_a INT) ; GO INSERT INTO dbo.doc_exf VALUES (1) ; GO ALTER TABLE dbo.doc_exf ADD AddDate smalldatetime NULL CONSTRAINT AddDateDflt DEFAULT GETDATE() WITH VALUES ; GO DROP TABLE dbo.doc_exf ; GO
I. Disabilitazione e riabilitazione di un vincolo
Nell'esempio seguente viene disabilitato un vincolo che limita i dati relativi agli stipendi accettabili. Viene inoltre utilizzato NOCHECK CONSTRAINT con ALTER TABLE per disabilitare il vincolo e consentire un inserimento che altrimenti violerebbe il vincolo. CHECK CONSTRAINT riabilita il vincolo.
CREATE TABLE dbo.cnst_example
(id INT NOT NULL,
name VARCHAR(10) NOT NULL,
salary MONEY NOT NULL
CONSTRAINT salary_cap CHECK (salary < 100000)
);
-- Valid inserts
INSERT INTO dbo.cnst_example VALUES (1,'Joe Brown',65000);
INSERT INTO dbo.cnst_example VALUES (2,'Mary Smith',75000);
-- This insert violates the constraint.
INSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);
-- Disable the constraint and try again.
ALTER TABLE dbo.cnst_example NOCHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);
-- Re-enable the constraint and try another insert; this will fail.
ALTER TABLE dbo.cnst_example CHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (4,'Eric James',110000) ;
J. Eliminazione di un vincolo
Nell'esempio seguente viene rimosso un vincolo UNIQUE da una tabella.
CREATE TABLE dbo.doc_exc ( column_a INT CONSTRAINT my_constraint UNIQUE) ; GO ALTER TABLE dbo.doc_exc DROP CONSTRAINT my_constraint ; GO DROP TABLE dbo.doc_exc ; GO
K. Trasferimento di partizioni tra tabelle
Nell'esempio seguente viene creata una tabella partizionata, presupponendo che nel database sia già stato creato lo schema di partizione myRangePS1. Viene quindi creata una tabella non partizionata con la stessa struttura della tabella partizionata e nello stesso filegroup di PARTITION 2 della tabella PartitionTable. I dati di PARTITION 2 della tabella PartitionTable vengono quindi trasferiti nella tabella NonPartitionTable.
CREATE TABLE PartitionTable (col1 int, col2 char(10)) ON myRangePS1 (col1) ; GO CREATE TABLE NonPartitionTable (col1 int, col2 char(10)) ON test2fg ; GO ALTER TABLE PartitionTable SWITCH PARTITION 2 TO NonPartitionTable ; GO
L. Disabilitazione e riabilitazione di un trigger
Nell'esempio seguente viene utilizzata l'opzione DISABLE TRIGGER di ALTER TABLE per disabilitare il trigger e consentire un inserimento che altrimenti violerebbe il trigger. Per riabilitare il trigger viene quindi utilizzato ENABLE TRIGGER.
CREATE TABLE dbo.trig_example
(id INT,
name VARCHAR(12),
salary MONEY) ;
GO
-- Create the trigger.
CREATE TRIGGER dbo.trig1 ON dbo.trig_example FOR INSERT
AS
IF (SELECT COUNT(*) FROM INSERTED
WHERE salary > 100000) > 0
BEGIN
print 'TRIG1 Error: you attempted to insert a salary > $100,000'
ROLLBACK TRANSACTION
END ;
GO
-- Try an insert that violates the trigger.
INSERT INTO dbo.trig_example VALUES (1,'Pat Smith',100001) ;
GO
-- Disable the trigger.
ALTER TABLE dbo.trig_example DISABLE TRIGGER trig1 ;
GO
-- Try an insert that would typically violate the trigger.
INSERT INTO dbo.trig_example VALUES (2,'Chuck Jones',100001) ;
GO
-- Re-enable the trigger.
ALTER TABLE dbo.trig_example ENABLE TRIGGER trig1 ;
GO
-- Try an insert that violates the trigger.
INSERT INTO dbo.trig_example VALUES (3,'Mary Booth',100001) ;
GO
M. Creazione di un vincolo PRIMARY KEY con opzioni per gli indici
Nell'esempio seguente viene creato il vincolo PRIMARY KEY PK_TransactionHistoryArchive_TransactionID e vengono impostate le opzioni FILLFACTOR, ONLINE e PAD_INDEX. All'indice cluster risultante sarà assegnato lo stesso nome del vincolo.
USE AdventureWorks; GO ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID) WITH (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON) GO
N. Eliminazione di un vincolo PRIMARY KEY nella modalità ONLINE
Nell'esempio seguente viene eliminato un vincolo PRIMARY KEY con l'opzione ONLINE impostata su ON.
USE AdventureWorks; GO ALTER TABLE Production.TransactionHistoryArchive DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID WITH (ONLINE = ON); GO
O. Aggiunta e rimozione di un vincolo FOREIGN KEY
Nell'esempio seguente viene creata la tabella ContactBackup, successivamente modificata con l'aggiunta di un vincolo FOREIGN KEY che fa riferimento alla tabella Contact e quindi con l'eliminazione del vincolo FOREIGN KEY.
USE AdventureWorks ;
GO
CREATE TABLE Person.ContactBackup
(ContactID int) ;
GO
ALTER TABLE Person.ContactBackup
ADD CONSTRAINT FK_ContactBacup_Contact FOREIGN KEY (ContactID)
REFERENCES Person.Contact (ContactID) ;
ALTER TABLE Person.ContactBackup
DROP CONSTRAINT FK_ContactBacup_Contact ;
GO
DROP TABLE Person.ContactBackup ;
P. Modifica delle dimensioni di una colonna
Nell'esempio seguente vengono aumentate le dimensioni di una colonna varchar e la precisione e la scala di una colonna decimal. Poiché le colonne contengono dati, le relative dimensioni possono solo essere aumentate. Si noti inoltre che la colonna col_a è definita in un indice univoco. Le dimensioni di col_a possono ancora essere aumentate poiché il tipo di dati è varchar e l'indice non è il risultato di un vincolo PRIMARY KEY.
IF OBJECT_ID ( 'dbo.doc_exy', 'U' ) IS NOT NULL
DROP TABLE dbo.doc_exy;
GO
-- Create a two-column table with a unique index on the varchar column.
CREATE TABLE dbo.doc_exy ( col_a varchar(5) UNIQUE NOT NULL, col_b decimal (4,2));
GO
INSERT INTO dbo.doc_exy VALUES ('Test', 99.99);
GO
-- Verify the current column size.
SELECT name, TYPE_NAME(system_type_id), max_length, precision, scale
FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.doc_exy');
GO
-- Increase the size of the varchar column.
ALTER TABLE dbo.doc_exy ALTER COLUMN col_a varchar(25);
GO
-- Increase the scale and precision of the decimal column.
ALTER TABLE dbo.doc_exy ALTER COLUMN col_b decimal (10,4);
GO
-- Insert a new row.
INSERT INTO dbo.doc_exy VALUES ('MyNewColumnSize', 99999.9999) ;
GO
-- Verify the current column size.
SELECT name, TYPE_NAME(system_type_id), max_length, precision, scale
FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.doc_exy');
Q. Consentire l'escalation blocchi nelle tabelle partizionate
Nell'esempio seguente viene abilitata l'escalation blocchi a livello di partizione in una tabella partizionata. Se la tabella non è partizionata, l'escalation blocchi viene abilitata a livello TABLE.
ALTER TABLE T1 SET (LOCK_ESCALATION = AUTO) GO
R. Configurazione del rilevamento delle modifiche in una tabella
Nell'esempio seguente viene abilitato il rilevamento delle modifiche per la tabella Person.Contact nel database AdventureWorks.
USE AdventureWorks; ALTER TABLE Person.Contact ENABLE CHANGE_TRACKING;
Nell'esempio seguente vengono abilitati il rilevamento delle modifiche e il rilevamento delle colonne aggiornate durante una modifica.
USE AdventureWorks; ALTER TABLE Person.Contact ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON);
Nell'esempio seguente viene disabilitato il rilevamento delle modifiche per la tabella Person.Contact nel database AdventureWorks:
USE AdventureWorks; ALTER TABLE Person.Contact DISABLE CHANGE_TRACKING;
S. Modifica di una tabella per cambiare la compressione
Nell'esempio seguente viene modificata la compressione di una tabella partizionata. L'heap o l'indice cluster verrà ricompilato. Se la tabella è un heap, tutti gli indici non cluster verranno ricostruiti.
ALTER TABLE T1 REBUILD WITH (DATA_COMPRESSION = PAGE);
Nell'esempio seguente viene modificata la compressione di una tabella partizionata. La sintassi REBUILD PARTITION = 1 consente di ricompilare solo il numero di partizione 1.
ALTER TABLE PartitionTable1 REBUILD PARTITION = 1 WITH (DATA_COMPRESSION = NONE) ; GO
Se per la stessa operazione viene utilizzata la sintassi alternativa seguente, vengono ricostruite tutte le partizioni della tabella.
ALTER TABLE PartitionTable1 REBUILD PARTITION ALL WITH (DATA_COMPRESSION = PAGE ON PARTITIONS(1) ) ;
Per ulteriori esempi sulla compressione dei dati, vedere Creazione di tabelle e di indici compressi.
T. Aggiunta di una colonna di tipo sparse
Negli esempi seguenti vengono illustrate l'aggiunta e la modifica di colonne di tipo sparse nella tabella T1. Il codice per creare la tabella T1 è il seguente:
CREATE TABLE T1 (C1 int PRIMARY KEY, C2 varchar(50) SPARSE NULL, C3 int SPARSE NULL, C4 int ) ; GO
Per aggiungere una colonna di tipo sparse aggiuntiva C5, eseguire l'istruzione riportata di seguito.
ALTER TABLE T1 ADD C5 char(100) SPARSE NULL ; GO
Per convertire la colonna non di tipo sparse C4 in una colonna di tipo sparse, eseguire l'istruzione riportata di seguito.
ALTER TABLE T1 ALTER COLUMN C4 ADD SPARSE ; GO
Per convertire la colonna di tipo sparse C4 in una colonna non di tipo sparse, eseguire l'istruzione riportata di seguito.
ALTER TABLE T1 ALTER COLUMN C4 DROP SPARSE; GO
U. Aggiunta di un set di colonne
Negli esempi seguenti viene illustrato come aggiungere una colonna alla tabella T2. Un set di colonne non può essere aggiunto a una tabella che contiene già colonne di tipo sparse. Il codice per creare la tabella T2 è il seguente:
CREATE TABLE T2 (C1 int PRIMARY KEY, C2 varchar(50) NULL, C3 int NULL, C4 int ) ; GO
Le tre istruzioni seguenti aggiungono un set di colonne denominato CS, quindi modificano le colonne C2 e C3 in SPARSE.
ALTER TABLE T2 ADD CS XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ; GO ALTER TABLE T2 ALTER COLUMN C2 ADD SPARSE ; GO ALTER TABLE T2 ALTER COLUMN C3 ADD SPARSE ; GO
V. Modifica delle regole di confronto di una colonna
Nell'esempio seguente viene illustrato come modificare le regole di confronto di una colonna. Viene innanzitutto creata la tabella T3 con regole di confronto dell'utente predefinite:
CREATE TABLE T3 (C1 int PRIMARY KEY, C2 varchar(50) NULL, C3 int NULL, C4 int ) ; GO
In seguito le regole di confronto della colonna C2 vengono impostate su Latin1_General_BIN. Si noti che il tipo di dati è obbligatorio, anche se non è modificato.
ALTER TABLE T3 ALTER COLUMN C2 varchar(50) COLLATE Latin1_General_BIN GO
|
Contenuto aggiornato |
|---|
|
Correzione relativa all'opzione AUTO di escalation blocchi. |
|
Aggiunta di [ SPARSE ] alle proprietà della sintassi (prima di [ NULL | NOT NULL ]). |
|
Aggiunta di informazioni relative a tipi definiti dall'utente, valori predefiniti e supporto dei valori Null nella sezione Argomenti. |
|
Aggiunta di ulteriori informazioni alla definizione della sintassi SPARSE nella sezione Argomenti. |
|
Aggiunta di un esempio in cui vengono illustrati la modalità di modifica delle regole di confronto della colonna e il requisito che richiede una nuova specifica del tipo di dati. |
