Indice unico con filtro

05/08/2006 - 06:58 por Carlos | Informe spam
Como puedo crear un indice unico pero solo para un subconjunto de datos
basandome en los valores de una columna.

Ej.

col1, col2

Yo quiero crear un indice unico para col2 pero que solo me tome los
registros que tienen col1=1 or col1=3 . Seria algo como un indice unico pero
con un filtro.


Se puede ?
 

Leer las respuestas

#1 Alejandro Mesa
05/08/2006 - 17:54 | Informe spam
Carlos,

Puedes crear una vista donde col1 in (1, 3) y luego crear un indice unico
por col2.

create view dbo.v1
with schemabinding
as
select col2
from dbo.t1
where col1 in (1, 3)
go

create unique clustered index v1_col2_u_c_ix
on dbo.v1(col2)
go

insert into dbo.t1(col1, col2) values(1, 1)
go

insert into dbo.t1(col1, col2) values(3, 1)
go

ambien puedes crear una columna calculada y usar esta junto col2 para
definir una restriccion de unicidad. Este metodo funciona si tienes una clave
primaria que no sea multi-columnas. Supongamos que tienes:

create table dbo.t1 (
pk int not null identity primary key,
col1 int not null,
col2 int not null,
col3 as case when col1 in (1, 3) then 0 else pk end,
constraint uq_t1_col2_col3 unique (col2, col3)
)
go

insert into dbo.t1(col1, col2) values(1, 1)
insert into dbo.t1(col1, col2) values(2, 1)
insert into dbo.t1(col1, col2) values(4, 1)
go

select * from dbo.t1
go

insert into dbo.t1(col1, col2) values(3, 1)
go


AMB

"Carlos" wrote:

Como puedo crear un indice unico pero solo para un subconjunto de datos
basandome en los valores de una columna.

Ej.

col1, col2

Yo quiero crear un indice unico para col2 pero que solo me tome los
registros que tienen col1=1 or col1=3 . Seria algo como un indice unico pero
con un filtro.


Se puede ?



Preguntas similares