Cambiar el esquema de una tabla temporal con control de versiones del sistema

Aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed InstanceBase de datos SQL en Microsoft Fabric

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

Remarks

Necesitas CONTROL permiso en las tablas de corriente y de historial para cambiar el esquema de una tabla temporal.

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

El Motor de base de datos propaga el cambio de esquema a la tabla de historial, dependiendo del tipo de cambio.

Añadir columnas varchar(max),nvarchar(max), varbinary(max) o xml con valores predeterminados es una operación de actualización de datos en todas las ediciones de SQL Server.

Si el tamaño de fila tras añadir una columna supera el límite de fila, no puedes añadir nuevas columnas online.

Una vez que amplía una tabla con una nueva columna NOT 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 con las tablas temporales. La ALTER operación de columna no se ejecuta en línea, independientemente del valor que especifiques para la ONLINE opción.

Puede usar ALTER COLUMN para cambiar la propiedad IsHidden de las columnas de periodo.

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

  • Agregar una columna calculada
  • Adición de una columna IDENTITY
  • Añadir una SPARSE columna o cambiar una columna existente para que sea SPARSE cuando la tabla de historial está configurada en DATA_COMPRESSION = PAGE o DATA_COMPRESSION = ROW, que es el valor predeterminado de la tabla de historial.
  • Agregar COLUMN_SET
  • Añadir una ROWGUIDCOL columna o cambiar una columna existente por ser ROWGUIDCOL
  • Cambio de una columna NULL a NOT NULL si la columna contiene valores null en la tabla actual o la de historial

Examples

A. Cambio del esquema de una tabla temporal

Aquí tienes algunos ejemplos que cambian el esquema de una tabla temporal.

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

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

ALTER TABLE dbo.Department
    ADD TempColumn INT;
GO

ALTER TABLE dbo.Department
    DROP COLUMN TempColumn;

B. Añada columnas de periodo mediante el indicador HIDDEN

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Puede usar ALTER COLUMN <period_column> DROP HIDDEN para borrar la marca oculta en una columna de periodo.

C. Cambio del esquema con SYSTEM_VERSIONING establecido en OFF

El siguiente ejemplo muestra cómo cambiar el esquema cuando aún necesitas configurar SYSTEM_VERSIONING = OFF (añadir una IDENTITY columna). Este ejemplo deshabilita la comprobación de coherencia de datos. Esta comprobación es innecesaria cuando se realiza el cambio de esquema dentro de una transacción, porque no pueden producirse cambios concurrentes en los datos.

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
        CONSTRAINT DF_Cntr DEFAULT 0 NOT NULL;

ALTER TABLE [dbo].[CompanyLocation]
SET (
    SYSTEM_VERSIONING = ON
    (HISTORY_TABLE = [dbo].[CompanyLocationHistory])
);

COMMIT TRANSACTION;