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

Preguntas similare

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
>
>
Respuesta Responder a este mensaje
#2 Alejandro Mesa
04/10/2006 - 21:49 | Informe spam
María Eugenia Ryan,

Puedes adicionar una restriccion tipo CHECK a la tabla.

alter table dbo.t1
add constraint ck_t1_campo3 check (campo3 != campo campo1 and campo3 !=
campo2)
go


AMB

"María Eugenia Ryan" wrote:

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



Respuesta Responder a este mensaje
#3 María Eugenia Ryan
05/10/2006 - 17:42 | Informe spam
AMB:
No sé cómo hacer lo que me dices.



"Alejandro Mesa" escribió en el
mensaje news:
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
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida