Modification du schéma d’une table temporelle à version contrôlée par le système

S’applique à :yes SQL Server 2016 (13.x) et versions ultérieures YesAzure SQL Database Azure SQL Managed Instance Yes

Utilisez l’instruction ALTER TABLE pour ajouter, modifier ou supprimer une colonne.

Exemples

Voici quelques exemples illustrant comment modifier le schéma d’une table temporelle.

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 ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Remarques importantes

  • L’autorisationCONTROL sur les tables actuelles et historiques est nécessaire pour modifier le schéma de la table temporelle.

  • Pendant une opération ALTER TABLE , le système verrouille le schéma des deux tables.

  • La modification de schéma spécifiée est propagée à la table d’historique de manière appropriée (selon le type de modification).

  • L’ajout de colonnes varchar(max), nvarchar(max), varbinary(max) ou XML avec des valeurs par défaut sera une opération de mise à jour des données sur toutes les éditions de SQL Server.

  • Si la taille de ligne après l’ajout de colonne dépasse la limite, les nouvelles colonnes ne peuvent pas être ajoutées en ligne.

  • Lorsque vous ajoutez à une table une colonne NOT NULL, envisagez de supprimer la contrainte par défaut sur la table historique, car toutes les colonnes de cette table sont automatiquement renseignées par le système.

  • L’option Online (WITH (ONLINE = ON) n’a aucun effet sur ALTER TABLE ALTER COLUMN si la version de table temporelle est contrôlée par le système. L’opération ALTER COLUMN n’est pas effectuée en ligne, quelle que soit la valeur spécifiée pour l’option ONLINE.

  • Vous pouvez utiliser ALTER COLUMN pour modifier la propriété IsHidden pour les colonnes de période.

  • Vous ne pouvez pas utiliser directement ALTER pour les modifications de schéma suivantes. Pour ces types de modifications, définissez SYSTEM_VERSIONING = OFF.

    • Ajout d’une colonne calculée
    • Ajout d’une colonne IDENTITY
    • Ajout d’une colonne SPARSE ou modification d’une colonne en SPARSE lorsque la table historique est configurée avec DATA_COMPRESSION = PAGE ou DATA_COMPRESSION = ROW, qui est la valeur par défaut pour la table historique.
    • Ajout d’un COLUMN_SET
    • Ajout d’une colonne ROWGUIDCOL ou modification d’une colonne en ROWGUIDCOL
    • Modification d’une colonne NULL sur NOT NULL si la colonne contient des valeurs Null dans la table active ou historique

L’exemple suivant illustre la modification du schéma où le paramètre SYSTEM_VERSIONING = OFF est toujours requis (ajout de la colonne IDENTITY ). Cet exemple désactive la vérification de la cohérence des données. Cette vérification n’est pas nécessaire lorsque la modification du schéma s’effectue dans une transaction, car aucune modification simultanée de données n’est possible.

    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;

Étapes suivantes