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.
Comentarios
Se necesita el permiso CONTROL
en las tablas actual y de historial 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).
La adición de varchar(max), nvarchar(max), varbinary(max) o columnas 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 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 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 columna ALTER
no se ejecuta en línea, independientemente del valor que se haya especificado para la opción ONLINE
.
Puede usar ALTER COLUMN
para cambiar la propiedad IsHidden
de las columnas de periodo.
No puede usar ALTER
directa 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
- Agregar una columna
SPARSE
o cambiar la columna existente para que seaSPARSE
cuando la tabla de historial está establecida enDATA_COMPRESSION = PAGE
oDATA_COMPRESSION = ROW
, que es el valor predeterminado de la tabla de historial. - Adición de una instancia de
COLUMN_SET
- Adición de una columna
ROWGUIDCOL
o cambio de una columna existente para que seaROWGUIDCOL
- Cambio de una columna
NULL
aNOT NULL
si la columna contiene valores null en la tabla actual o la de historial
Ejemplos
A Cambio del esquema de una tabla temporal
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.example.com';
ALTER TABLE dbo.Department
ADD TempColumn INT;
GO
ALTER TABLE dbo.Department
DROP COLUMN TempColumn;
B. Adición de columnas de periodo mediante la marca 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
En el siguiente ejemplo se muestra el cambio del esquema en el que el valor SYSTEM_VERSIONING = OFF
sigue siendo necesario (se agrega una 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;
Contenido relacionado
- Tablas temporales
- Introducción a las tablas temporales con control de versiones del sistema
- Administración de la retención de datos históricos en las tablas temporales con versiones del sistema
- Tablas temporales con control de versiones del sistema con tablas optimizadas para memoria
- ALTER TABLE (Transact-SQL)
- Creación de una tabla temporal con versión del sistema
- Modificación de los datos de una tabla temporal con control de versiones del sistema
- Consulta de los datos de una tabla temporal con control de versiones del sistema
- Detención del control de versiones en una tabla temporal con control de versiones del sistema