Pregunta

Estoy buscando particiones horizontales para una tabla que contenga datos de series temporales. Descubrí que la partición es mucho más fácil en 2005 que en 2000, pero parece que no puedo encontrar esta respuesta:

¿Puedo agregar / soltar columnas de una tabla particionada?

¿Se requieren pasos especiales porque está particionado?

¿Fue útil?

Solución 2

No pude encontrar una respuesta definitiva (encontré que el documento @ E.J. Brennan al que se hace referencia es un poco denso y poco claro). Así que agregué a este ejemplo y he probado que , sí, puede agregar / soltar columnas :

USE adventureworks
go

create partition function YearPF(datetime) as range right for values ('20050101');

-- Now we need to add filegroups that will contains partitioned values
alter database adventureworks add filegroup YearFG1;
alter database adventureworks add filegroup YearFG2;

-- Now we need to add file to filegroups
alter database adventureworks add file (name = 'YearF1', filename = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdvWorksF1.ndf') to filegroup YearFG1;
alter database adventureworks add file (name = 'YearF2', filename = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdvWorksF2.ndf') to filegroup YearFG2;

-- Here we associate the partition function to 
-- the created filegroup via a Partitioning Scheme
create partition scheme YearPS as partition YearPF to (YearFG1, YearFG2)

-- Now just create a table that uses the particion scheme
create table PartitionedOrders
(
  Id int not null identity(1,1),
  DueDate DateTime not null,
) on YearPS(DueDate)

-- And now we just have to use the table!
insert into PartitionedOrders values('20020101')
insert into PartitionedOrders values('20030101')
insert into PartitionedOrders values('20040101')
insert into PartitionedOrders values('20050101')
insert into PartitionedOrders values('20060101')

-- Now we want to see where our values has falled
select *, $partition.YearPF(DueDate) from PartitionedOrders

-- see if we can add a column
ALTER TABLE PartitionedOrders ADD NewColumn INT NULL

-- add some more records, populating the new column
insert into PartitionedOrders values('20010101', 1)
insert into PartitionedOrders values('20070101', 2)

-- see that they were inserted properly
select *, $partition.YearPF(DueDate) from PartitionedOrders

ALTER TABLE PartitionedOrders DROP COLUMN NewColumn

-- see that the column dropped
select *, $partition.YearPF(DueDate) from PartitionedOrders

/* clean up
drop table PartitionedOrders
drop partition scheme YearPS;
drop partition function YearPF;
alter database adventureworks remove file YearF1;
alter database adventureworks remove file YearF2;
alter database adventureworks remove  filegroup YearFG1;
alter database adventureworks remove filegroup YearFG2;
*/

Otros consejos

Además de realizar operaciones de INTERRUPTOR que involucran tablas particionadas, ALTER TABLE puede usarse para cambiar el estado de las columnas, restricciones y disparadores de una tabla particionada tal como se usa para tablas no particionadas. Sin embargo, esta declaración no se puede usar para cambiar la forma en que se divide la tabla. Para repartir una tabla particionada, use ALTER PARTITION SCHEME y ALTER PARTITION FUNCTION. Además, no puede cambiar el tipo de datos de una columna de una tabla particionada.

Lea más aquí: http://technet.microsoft.com/en-us/library/ms190273. aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top