Ayuda con trigger y regla

21/02/2009 - 22:17 por María | Informe spam
Tabla Direcciones
codigo,nombre, .., DireccionPrincipal

El campo DireccionPrincipal es un bit (logico) para indicar si la direccion
es la principal.

Como regla, necesito que la tabla tenga solo un registro marcado como
DireccionPrincipal.

La tabla permite inserciones y actualizaciones.

Estoy pensandolo en un trigger pero no encuentro como hacerlo ya que se
podria mandar actualizaciones de varios registros ya que asi son los
triggers.

Muchas gracias por cualquier ayuda.
 

Leer las respuestas

#1 Alejandro Mesa
22/02/2009 - 17:50 | Informe spam
María,

- Esta tabla mantiene las direcciones de ...? - clientes, empleados, etc.
- Cual es la clave primaria de esta tabla?
- Quieres mantener una unica direccion principal por ...? - clienteId,
empleadoId, etc.

Que raro que no usas una tabla de intersección para expresar esta relación
que parece ser de muchas a muchas.

Supongamos que esta es una tabla de intersección, donde se tiene la pk de el
cliente y la pk de la direccion, algo asi como:

clienteDireccion (clienteId, direccionId, direccionPrincipal, ...)

y que tenemos las sgtes restricciones.

pk (clienteId, direccionId)
fk (clienteId) references cliente(clienteId)
fk (dirId) references direccion(direccionId)

create trigger tr_clienteDireccion_InsUp on clienteDireccion
for insert, update
as
if @@rowcount = 0 return;

set nocount on;

if exists (
select
*
from
clienteDireccion as cd
inner join
(select distinct i.ClienteId from inserted as i) as d
on cd.clienteId = d.clienteId
where
cd.direccionPrincipal = 1
group by
cd.clienteId
having
count(*) > 1
)
begin
raiserror('Error, cada cliente puede tener una sola dir como
principal.', 16, 1);
rollback transaction;
end
go

AMB


"María" wrote:

Tabla Direcciones
codigo,nombre, .., DireccionPrincipal

El campo DireccionPrincipal es un bit (logico) para indicar si la direccion
es la principal.

Como regla, necesito que la tabla tenga solo un registro marcado como
DireccionPrincipal.

La tabla permite inserciones y actualizaciones.

Estoy pensandolo en un trigger pero no encuentro como hacerlo ya que se
podria mandar actualizaciones de varios registros ya que asi son los
triggers.

Muchas gracias por cualquier ayuda.



Preguntas similares