Compartir vía


Cambio del esquema de una tabla temporal con control de versiones del sistema

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL Database Azure SQL Managed Instance

Use la instrucción ALTER TABLE para agregar, modificar o quitar una columna.

Ejemplos

Estos son algunos ejemplos que cambian el esquema de la tabla temporal.

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;

Notas importantes

  • Se requiere el permisoCONTROL en tablas de historial y actuales para cambiar el esquema de tabla temporal.

  • Durante una operación ALTER TABLE, el sistema mantiene un bloqueo de esquema en ambas tablas.

  • El cambio de esquema especificado se propaga a la tabla de historial de manera adecuada (según el tipo de cambio).

  • Agregar varchar(max), nvarchar(max), varbinary(max) o columnas XML con valores predeterminados será una operación de actualización de datos en todas las ediciones de SQL Server.

  • Si el tamaño de fila tras la adición de columna supera el límite de tamaño de fila, no se pueden agregar nuevas columnas en línea.

  • Una vez que amplía una tabla con una nueva columna que no es NULL, considere la posibilidad de quitar la restricción predeterminada de la tabla de historial, ya que todas las columnas de esa tabla las rellena el sistema automáticamente.

  • La opción en línea (WITH (ONLINE = ON) no tiene ningún efecto sobre ALTER TABLE ALTER COLUMN en las tablas temporales con control de versiones del sistema. La columna ALTER no se realiza en línea, independientemente del valor que se especificó para la opción ONLINE.

  • Puede usar ALTER COLUMN para cambiar la propiedad IsHidden para las columnas de período.

  • No puede usar ALTER directa para los siguientes cambios de esquema. Para estos tipos de cambios, establezca SYSTEM_VERSIONING = OFF.

    • Agregar una columna calculada
    • Agregar una columna IDENTITY
    • Agregar una columna SPARSE o cambiar la columna existente para que sea SPARSEsi la tabla de historial está establecida en DATA_COMPRESSION = PAGE o en DATA_COMPRESSION = ROW, que es el valor predeterminado de la tabla de historial.
    • Agregar un COLUMN_SET
    • Agregar una columna ROWGUIDCOL o cambiar una columna existente para que sea ROWGUIDCOL
    • Modificar una columna NULL por NOT NULL si la columna contiene valores null en la tabla actual o de historial

En el siguiente ejemplo se muestra el cambio del esquema en el que el valor SYSTEM_VERSIONING = OFF sigue siendo necesario (agregar columna IDENTITY). Este ejemplo deshabilita la comprobación de coherencia de datos. Esta comprobación no es necesaria si se realiza el cambio de esquema dentro de una transacción en la que no pueden producirse cambios de datos simultáneos.

BEGIN TRANSACTION
    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
        CONSTRAINT DF_Cntr DEFAULT 0;
    ALTER TABLE [dbo].[CompanyLocation] SET
    (
        SYSTEM_VERSIONING = ON
        (HISTORY_TABLE = [dbo].[CompanyLocationHistory])
    );
COMMIT;

Pasos siguientes