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

#1 Yoli
07/03/2005 - 16:43 | Informe spam
Eso lo tengo yo hecho en una parte de una de las aplicaciones que
desarrollo. Lo hemos contemplado en la funcionalidad de la aplicación y lo
hemos metido dentro de un procedimiento almacenado.

Cuando tengo que cambiar el valor de este campo, se supone que sólo un
registro va a tener ese 1, así que:

Actualizo el registro que tiene un 1 y lo pongo a 0
Actualizo el registro que lo debe tener a 1

Yo no suelo usar triggers, prefiero poder controlar el flujo del programa en
todo tiempo y saber qué es lo que está ocurriendo.

Si necesitas algo de código o más ayuda, por aqui estaré.

Saludos!!


Yoli

-
Recuerda, hoy puede ser el día menos pensado...
-
"Alonso" escribió en el mensaje
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
#2 Alejandro Mesa
07/03/2005 - 16:45 | Informe spam
Alonso,

Aqui tienes un ejemplo.


use northwind
go

create table t (
colA int not null identity unique,
colB bit not null default (0)
)
go

create trigger tr_t_ins_upd on t
for insert, update
as
set nocount on

if (select count(*) from inserted where colB = 1) > 1
begin
rollback transaction
raiserror('Solamente una fila puede tener valor 1 en la columna colB.', 16,
1)
return
end

update
a
set
a.colB = 0
from
t as a
inner join
inserted as i
on i.colB = 1 and a.colA != i.colA
go

insert into t default values
insert into t default values
insert into t default values

insert into t (colB ) values(1)
insert into t (colB ) values(1)
insert into t (colB ) values(1)
go

select * from t
go

update
t
set
colB = 1
where
colA between 2 and 5
go

select * from t
go

update
t
set
colB = 1
where
colA = 3
go

select * from t
go

drop table t
go


AMB


"Alonso" wrote:

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
#3 Maxi
07/03/2005 - 16:50 | Informe spam
Hola, a ver, poder se puede hacer en un trigger como asi tambien un update
pero no sobre la tabla inserted, el JOIN lo podes hacer porque son tablas.

En un trigger lo que veo de malo es que estos trabajan con conjunto de
registros y no se me ocurre de forma simple como lo podrias resolver, lo
ideal seria quizas en el SP's de update o insert poner la logica que estas
comentando


Salu2
Maxi


"Alonso" escribió en el mensaje
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
#4 Ricardo Passians
07/03/2005 - 17:18 | Informe spam
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
#5 Alonso
07/03/2005 - 17:50 | Informe spam
Lo acabo de probar y funciona a las mil.

Gracias



"Ricardo Passians" wrote in message
news:Op2%
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida