Actualización en un trigger

22/07/2004 - 22:23 por Gregorio López Rojo | Informe spam
Hola a todos. Estoy intentando diseñar un trigger para actualizar un campo
dependiendo del valor de otro campo relacionado con otra tabla. Sería algo
como lo siguiente:

create trigger trigger_InsertTabla1 on Tabla1
for insert
as
set nocount on

declare @campo bit
set @campo = (select campo from Tabla2 where llave = inserted.llave)
if @campo = 1
update inserted
set otrocampo = 0
else
update inserted
set otrocampo = 1

Pero como es sabido la tabla inserted no puede ser actualizada, ¿como sería
entonces el trigger con esta consideracion? ¿O no puede hacerse esto?

Saludos y gracias anticipadas.

Preguntas similare

Leer las respuestas

#6 Gregorio López Rojo
23/07/2004 - 00:27 | Informe spam
La solución que me propones:
UPDATE Tabla1
SET OtroCampoÊSE I.Campo WHEN 0 THEN 1
ELSE 0 END)
FROM Tabla1
JOIN Inserted
ON Tabla1.PK=Inserted.PK

me serviría solo en un trigger FOR AFTER cosa que no existe en SQL Server 7
:(

Saludos.

"Javier Loria" wrote in message
news:
Hola:
Si es solo para INSERT lo mas probable es que puedas hacerlo con un
DEFAULT sin usar el trigger. Cuando creas la Tabla puedes agregar un valor
que dependa de otra columna (no de otras filas o tablas).
=> CREATE TABLE Tabla(
.
, OtroCampo INT NOT NULL
DEFAULT(CASE Campo WHEN 0 THEN 1
ELSE 0 END)
,
)
=> Si es en Update y lo quieres hacer en el Trigger, puedes hacer algo
como:
=>
UPDATE Tabla1
SET OtroCampoÊSE I.Campo WHEN 0 THEN 1
ELSE 0 END)
FROM Tabla1
JOIN Inserted
ON Tabla1.PK=Inserted.PK
...
=> Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Gregorio López Rojo escribio:
> Hola a todos. Estoy intentando diseñar un trigger para actualizar un
> campo dependiendo del valor de otro campo relacionado con otra tabla.
> Sería algo como lo siguiente:
>
> create trigger trigger_InsertTabla1 on Tabla1
> for insert
> as
> set nocount on
>
> declare @campo bit
> set @campo = (select campo from Tabla2 where llave > > inserted.llave) if @campo = 1
> update inserted
> set otrocampo = 0
> else
> update inserted
> set otrocampo = 1
>
> Pero como es sabido la tabla inserted no puede ser actualizada, ¿como
> sería entonces el trigger con esta consideracion? ¿O no puede hacerse
> esto?
>
> Saludos y gracias anticipadas.


Respuesta Responder a este mensaje
#7 Javier Loria
23/07/2004 - 02:59 | Informe spam
Hola:
La opcion de actualizacion SI FUNCIONA en SQL 7.0.
En SQL 7.0 TODOS los TRIGGERS son AFTER aunque no digan, lo nuevo en SQL
2000 son los INSTEAD OF.
Pruebalo y ojala te sirva.


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Gregorio López Rojo escribio:
La solución que me propones:
UPDATE Tabla1
SET OtroCampoÊSE I.Campo WHEN 0 THEN 1
ELSE 0
END) FROM Tabla1
JOIN Inserted
ON Tabla1.PK=Inserted.PK

me serviría solo en un trigger FOR AFTER cosa que no existe en SQL
Server 7 :(

Saludos.

"Javier Loria" wrote in message
news:
Hola:
Si es solo para INSERT lo mas probable es que puedas hacerlo con
un DEFAULT sin usar el trigger. Cuando creas la Tabla puedes agregar
un valor que dependa de otra columna (no de otras filas o tablas).
=>> CREATE TABLE Tabla(
.
, OtroCampo INT NOT NULL
DEFAULT(CASE Campo WHEN 0 THEN 1
ELSE 0
END) ,
)
=>> Si es en Update y lo quieres hacer en el Trigger, puedes hacer
algo como:
=>>
UPDATE Tabla1
SET OtroCampoÊSE I.Campo WHEN 0 THEN 1
ELSE 0
END) FROM Tabla1
JOIN Inserted
ON Tabla1.PK=Inserted.PK
...
=>> Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Gregorio López Rojo escribio:
Hola a todos. Estoy intentando diseñar un trigger para actualizar un
campo dependiendo del valor de otro campo relacionado con otra
tabla. Sería algo como lo siguiente:

create trigger trigger_InsertTabla1 on Tabla1
for insert
as
set nocount on

declare @campo bit
set @campo = (select campo from Tabla2 where llave >>> inserted.llave) if @campo = 1
update inserted
set otrocampo = 0
else
update inserted
set otrocampo = 1

Pero como es sabido la tabla inserted no puede ser actualizada,
¿como sería entonces el trigger con esta consideracion? ¿O no puede
hacerse esto?

Saludos y gracias anticipadas.
Respuesta Responder a este mensaje
#8 Gregorio López Rojo
23/07/2004 - 23:14 | Informe spam
Oh sí, ya lo vi en la ayuda, gracias Javier.

Saludos.

"Javier Loria" wrote in message
news:
Hola:
La opcion de actualizacion SI FUNCIONA en SQL 7.0.
En SQL 7.0 TODOS los TRIGGERS son AFTER aunque no digan, lo nuevo en


SQL
2000 son los INSTEAD OF.
Pruebalo y ojala te sirva.


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

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