Clave agrupada

04/10/2006 - 17:21 por María Eugenia Ryan | Informe spam
Hola a todos:
Tengo un problema en una tabla, tengo una clave principal (que es un campo
autonumérico), y necesito crear otro índice compuesto por 3 campos: Campol,
Campo2, Campo3. Pero necesito que no permita igresar duplicados, por ej:
Si Campo1 = 14
y Campo2 = 30 que no me permita:
Campo3 = 30

¿Cómo puedo hacer? porque no me permite crear otro cluster además de la
clave principal.

Muchas Gracias

María Eugenia
 

Leer las respuestas

#1 Alejandro Mesa
04/10/2006 - 21:45 | Informe spam
María Eugenia Ryan,

No veo como el trigger ayuda a evitar el problema mencionado. El trigger lo
que esta evitando es que una segunda fila sea insertada si existe alguna fila
con igual valores en la columnas [Id_Documento], [Id_Tipo_Instancia] y
[Num_Tipo_Instancia]. Eso lo puedes evitar adicionando una restriccion de
unicidad a la tabla.

alter table dbo.INSTANCIAS
add constraint uq_INSTANCIAS_Id_Documento_Id_Tipo_Instancia_Num_Tipo_Instancia
unique (Id_Documento, Id_Tipo_Instancia, Num_Tipo_Instancia)
go

La restriccion de unicidad forma parte del esquema de la tabla. SQL Server
puede hacer uso de esta para buscar mejor plan de ejecucion cuando sea
necesario.


AMB


"María Eugenia Ryan" wrote:

Perdón por molestar., me contesto yo sola (de paso espero que le sirva a alguien):

He creado un trigger:

ALTER TRIGGER INSTANCIAS_Mod_Ins
ON dbo.INSTANCIAS
FOR INSERT, UPDATE
AS
DECLARE @Cuantos[int]
SELECT @Cuantos = COUNT(*) FROM INSTANCIAS INNER JOIN INSERTED ON (INSTANCIAS.Id_Documento = INSERTED.Id_Documento AND INSTANCIAS.Id_Tipo_Instancia = INSERTED.Id_Tipo_Instancia AND INSTANCIAS.Num_Tipo_Instancia = INSERTED.Num_Tipo_Instancia)
/*INNER: o sea se devuelven todos los pares de filas coincidentes */
/* JOIN: Indica que se va a ejecutar la operación de combinación entre las tablas o vistas dadas*/

IF @Cuantos > 1
BEGIN
RAISERROR('Ya existe esa instancia.', 16 , 1) WITH SETERROR, NOWAIT
ROLLBACK TRANSACTION
END

"María Eugenia Ryan" escribió en el mensaje news:

> Hola a todos:
> Tengo un problema en una tabla, tengo una clave principal (que es un campo
> autonumérico), y necesito crear otro índice compuesto por 3 campos: Campol,
> Campo2, Campo3. Pero necesito que no permita igresar duplicados, por ej:
> Si Campo1 = 14
> y Campo2 = 30 que no me permita:
> Campo3 = 30
>
> ¿Cómo puedo hacer? porque no me permite crear otro cluster además de la
> clave principal.
>
> Muchas Gracias
>
> María Eugenia
>
>

Preguntas similares