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:

Una idea con un trigger (que para mí no tiene nada de malo) puede ser:

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

Donde reemplazarias Mitabla por el nombre de tu tabla, Miflag por el nombre
de la columna de tu flag y PK por el campo PK (o los campos).

Saludos




"Alonso" wrote in message
news:%
> 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
>
>



Respuesta Responder a este mensaje
#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
Respuesta Responder a este mensaje
#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
Respuesta Responder a este mensaje
#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:
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


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida