Modifica dello schema di una tabella temporale con controllo delle versioni di sistemaChanging the Schema of a System-Versioned Temporal Table

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2016)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Usare l'istruzione ALTER TABLE per aggiungere, modificare o rimuovere una colonna.Use the ALTER TABLE statement to add, alter or remove a column.

EsempiExamples

Di seguito sono riportati alcuni esempi in cui viene modificato lo schema della tabella temporale.Here are some examples that change the schema of temporal table.

ALTER TABLE dbo.Department   
   ALTER COLUMN  DeptName varchar(100);   

ALTER TABLE dbo.Department   
   ADD WebAddress nvarchar(255) NOT NULL    
   CONSTRAINT DF_WebAddress DEFAULT 'www.mycompany.com';   

ALTER TABLE dbo.Department   
   ADD TempColumn INT;   

GO   

ALTER TABLE dbo.Department   
   DROP COLUMN TempColumn;  

/* Setting IsHidden property for period columns.   
Use ALTER COLUMN <period_column> DROP HIDDEN to clear IsHidden flag */  

ALTER TABLE dbo.Department   
   ALTER COLUMN SysStartTime ADD HIDDEN;   

ALTER TABLE dbo.Department   
   ALTER COLUMN SysEndTime ADD HIDDEN;  

Note importantiImportant remarks

  • L'autorizzazioneCONTROL nelle tabelle correnti e di cronologia è necessaria per modificare lo schema della tabella temporale.CONTROL permission on current and history tables is required to change schema of temporal table.

  • Durante un'operazione ALTER TABLE , il sistema mantiene un blocco dello schema su entrambe le tabelle.During an ALTER TABLE operation, the system holds a schema lock on both tables.

  • La modifica dello schema specificata viene propagata alla tabella di cronologia in modo appropriato (a seconda del tipo di modifica).Specified schema change is propagated to history table in appropriate way (depending on type of change)

  • Se si aggiunge una colonna non nullable o si altera la colonna esistente in modo che diventi non nullable, è necessario specificare il valore predefinito per le righe esistenti.If you add a non-nullable column or alter existing column to become non-nullable, you must specify the default value for existing rows. Il sistema genererà un valore predefinito aggiuntivo con lo stesso valore e lo applicherà alla tabella di cronologia.The system will generate an additional default with the same value and apply it to the history table. L'aggiunta di DEFAULT a una tabella non vuota è un'operazione di dimensionamento dei dati in tutte le edizioni diverse da SQL ServerSQL Server Enterprise Edition, in cui si tratta di un'operazione di metadati.Adding DEFAULT to a non-empty table is a size of data operation on all editions other than SQL ServerSQL Server Enterprise Edition (on which it is a metadata operation).

  • L'aggiunta di varchar(max), nvarchar(max), varbinary(max) o colonne XML con i valori predefiniti sarà un'operazione di aggiornamento dati in tutte le edizioni di SQL ServerSQL Server.Adding varchar(max), nvarchar(max), varbinary(max) or XML columns with defaults will be an update data operation on all editions of SQL ServerSQL Server.

  • Se le dimensioni della riga dopo l'aggiunta delle colonne superano il limite di dimensioni della riga, non è possibile aggiungere nuove colonne online.If row size after column addition exceeds the row size limit, new columns cannot be added online.

  • Dopo aver esteso una tabella con una nuova colonna NON NULL, eliminare il vincolo predefinito nella tabella di cronologia in quanto tutte le colonne della tabella vengono popolate automaticamente dal sistema.Once you extend a table with a new NOT NULL column, consider dropping default constraint on the history table as all columns in that table are automatically populated by the system.

  • L'opzione online (WITH (ONLINE = ON) non ha alcun effetto su ALTER TABLE ALTER COLUMN nel caso di una tabella temporale con controllo delle versioni di sistema.Online option (WITH (ONLINE = ON) has no effect on ALTER TABLE ALTER COLUMN in case of system-versioned temporal table. La colonna ALTER non viene eseguita come online indipendentemente dal valore che è stato specificato per l'opzione ONLINE.ALTER column is not performed as online regardless of which value was specified for ONLINE option.

  • È possibile usare ALTER COLUMN per modificare la proprietà IsHidden per le colonne periodo.You can use ALTER COLUMN to change IsHidden property for period columns.

  • Non è possibile usare ALTER direttamente per le seguenti modifiche dello schema.You cannot use direct ALTER for the following schema changes. Per questi tipi di modifiche, impostare SYSTEM_VERSIONING = OFF.For these types of changes, set SYSTEM_VERSIONING = OFF.

    • Aggiunta di una colonna calcolataAdding a computed column

    • Aggiunta di una colonna IDENTITYAdding an IDENTITY column

    • Aggiunta di una colonna SPARSE o modifica della colonna esistente in SPARSEquando la tabella di cronologia è impostata su DATA_COMPRESSION = PAGE o DATA_COMPRESSION = ROW, ovvero il valore predefinito per la tabella di cronologia.Adding a SPARSE column or changing existing column to be SPARSEwhen the history table is set to DATA_COMPRESSION = PAGE or DATA_COMPRESSION = ROW, which is the default for the history table.

    • Aggiunta di COLUMN_SETAdding a COLUMN_SET

    • Aggiunta di una colonna ROWGUIDCOL o modifica della colonna esistente in ROWGUIDCOLAdding a ROWGUIDCOL column or changing existing column to be ROWGUIDCOL

      L'esempio seguente mostra la modifica dello schema in cui l'impostazione SYSTEM_VERSIONING = OFF è comunque necessaria (aggiunta della colonna IDENTITY ).The following example demonstrates changing the schema where setting SYSTEM_VERSIONING = OFF is still required (adding IDENTITY column).
      Si noti che questo esempio disabilita la verifica della coerenza dei dati.Notice that this example disables the data consistency check. Questa verifica non è necessaria quando viene effettuata la modifica dello schema all'interno di una transazione in quanto non possono verificarsi modifiche simultanee dei dati.This check is unnecessary when the schema change is made within a transaction as no concurrent data changes can occur.

      BEGIN TRAN   
      ALTER TABLE [dbo].[CompanyLocation] SET (SYSTEM_VERSIONING = OFF);   
      ALTER TABLE [CompanyLocation] ADD Cntr INT IDENTITY (1,1);   
      ALTER TABLE [dbo].[CompanyLocationHistory] ADD Cntr INT NOT NULL DEFAULT 0;   
      ALTER TABLE [dbo].[CompanyLocation]    
      SET    
      (   
      SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[CompanyLocationHistory])   
      );   
      COMMIT ;  
      

Questo articolo è stato utile?Did this Article Help You? Commenti e suggerimentiWe’re Listening

Quali informazioni si stanno cercando? La ricerca ha restituito i risultati desiderati?What information are you looking for, and did you find it? Microsoft incoraggia gli utenti a inviare i propri commenti per migliorare i contenutiWe’re listening to your feedback to improve the content. Inviare eventuali commenti all'indirizzo sqlfeedback@microsoft.comPlease submit your comments to sqlfeedback@microsoft.com

Vedere ancheSee Also

Tabelle temporali Temporal Tables
Introduzione alle tabelle temporali con controllo delle versioni di sistema Getting Started with System-Versioned Temporal Tables
Gestire la conservazione dei dati cronologici nelle tabelle temporali con controllo delle versioni di sistema Manage Retention of Historical Data in System-Versioned Temporal Tables
Tabelle temporali con controllo delle versioni di sistema con tabelle con ottimizzazione per la memoria System-Versioned Temporal Tables with Memory-Optimized Tables
ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
Creazione di una tabella temporale con controllo delle versioni di sistema Creating a System-Versioned Temporal Table
Modifica dei dati in una tabella temporale con controllo delle versioni di sistema Modifying Data in a System-Versioned Temporal Table
Query sui dati in una tabella temporale con controllo delle versioni di sistema Querying Data in a System-Versioned Temporal Table
Arresto del controllo delle versioni di sistema in una tabella temporale con controllo delle versioni di sistemaStopping System-Versioning on a System-Versioned Temporal Table