Duda en UPDATE trigger

07/03/2005 - 16:25 por Alonso | Informe spam
Necesito que un campo tipo BIT de una tabla sea como un flag excluyente.
Ejemplo que si se activa para determinado registro a un valor true (1),
quede entonces en false (0) para los demas registros de esa tabla.

Estoy pensando ponerlo en un trigger de (update, insert) pero tengo la duda
de como hacerlo. La pregunta es si se puede hacer en un UPDATE un join con
la tabla INSERTED ?
Me podrian dar una idea ?


Gracias

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
07/03/2005 - 18:01 | Informe spam
Ricardo,

Si no agregas la expresion MIFLAG = 1 en la sentencia update, entonces el
update funcionara para el primer 1 que insertes o actualizes, pero si el
proximo insert o update no es un 1 entonces el trigger pondra "0" para todas
las filas incluyendo el 1 previo.


Ejemplo:

use northwind
go

create table MITABLA (
PK int not null identity unique,
MIFLAG bit
)
go

CREATE TRIGGER t_IU_MITABLA ON MITABLA FOR INSERT, UPDATE
AS
UPDATE MITABLA SET MIFLAG=0 FROM MITABLA INNER JOIN INSERTED ON
MITABLA.PK<>INSERTED.PK
go

insert into MITABLA default values
go

insert into MITABLA (MIFLAG) values(1)
go

select * from MITABLA
go

insert into MITABLA default values
go

select * from MITABLA
go

drop table MITABLA
go


AMB


"Ricardo Passians" wrote:

Mostrar la cita
#7 Ricardo Passians
07/03/2005 - 18:26 | Informe spam
Claro. Fue un error.

Debería agregarse un where:

Ej.

CREATE TRIGGER t_IU_MITABLA ON MITABLA FOR INSERT, UPDATE
AS
UPDATE MITABLA SET MIFLAG=0 FROM MITABLA INNER JOIN INSERTED ON
MITABLA.PK<>INSERTED.PK WHERE INSERTED.ACTUAL=1
#8 Ricardo Passians
07/03/2005 - 18:29 | Informe spam
Perdón, MiFlag en vez de actual.

CREATE TRIGGER t_IU_MITABLA ON MITABLA FOR INSERT, UPDATE
AS
UPDATE MITABLA SET MIFLAG=0 FROM MITABLA INNER JOIN INSERTED ON
MITABLA.PK<>INSERTED.PK WHERE INSERTED.MIFLAG=1
#9 Ricardo Passians
07/03/2005 - 18:37 | Informe spam
Nota: Veo también que es equivalente a tu post de arriba salvo porque yo lo
uso en la cláusula WHERE en vez de en el JOIN, por la costumbre que tengo de
no usar en los JOIN's condiciones que no sean inter-tablas para mayor
legibilidad del código, pero en este caso no creo haya diferencias
significativas.


"Ricardo Passians" wrote in message
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida