trigger

30/05/2005 - 22:54 por icaro | Informe spam
Búen día

Deseo hacer una insert (o update) sobre una vista construida a partir de 2
tablas. desafortunadamente se ha omitido en la vista el campo de la llave
primaria de una de las tablas, porque es comun a ambas tablas, esto obiamente
genera error en el momento de intentar una inserción.

¿como es posible capturar los datos entrantes, y repartirlos adecuadamente a
cada una de las tablas?

Me han sugerido hacer un trigger que capture el evento, y usar "inside of",
pero no se que más hacer.

Agredezco su colaboración

Preguntas similare

Leer las respuestas

#1 Maxi
31/05/2005 - 00:31 | Informe spam
Hola, a ver, si cambias las tablas se actualizaran de forma automatica las
vistas. No sera que necesitas por medio de la vista actualizar las tablas?


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"icaro" escribió en el mensaje
news:
Búen día

Deseo hacer una insert (o update) sobre una vista construida a partir de 2
tablas. desafortunadamente se ha omitido en la vista el campo de la llave
primaria de una de las tablas, porque es comun a ambas tablas, esto
obiamente
genera error en el momento de intentar una inserción.

¿como es posible capturar los datos entrantes, y repartirlos adecuadamente
a
cada una de las tablas?

Me han sugerido hacer un trigger que capture el evento, y usar "inside
of",
pero no se que más hacer.

Agredezco su colaboración

Respuesta Responder a este mensaje
#2 icaro
31/05/2005 - 01:01 | Informe spam
Gracias MAXI

Encontré la respuesta yo mismo, creo que es falta de practica en la
sentencia trigger.

Es muy sencillo pero habia que estudiar !!!

/************
siendo la vista:
************/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vA]')
and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[vA]
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE VIEW vA
AS
SELECT T1.*,
T2.XX,
T2.YY,
T2.ZZ
FROM T1,T2
WHERE T1.KK *= T2.KK


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


/**************************
usar:
***************************/

IF EXISTS (SELECT name FROM sysobjects
WHERE name = 't1_va' AND type = 'TR')
DROP TRIGGER t1_va
GO

create trigger t1_va
on vA
instead of INSERT
as
begin
insert into t1
select AA,BB,CC,KK FROM inserted
INSERT INTO T2
select XX,YY,ZZ,KK FROM inserted
end




"icaro" wrote:

Búen día

Deseo hacer una insert (o update) sobre una vista construida a partir de 2
tablas. desafortunadamente se ha omitido en la vista el campo de la llave
primaria de una de las tablas, porque es comun a ambas tablas, esto obiamente
genera error en el momento de intentar una inserción.

¿como es posible capturar los datos entrantes, y repartirlos adecuadamente a
cada una de las tablas?

Me han sugerido hacer un trigger que capture el evento, y usar "inside of",
pero no se que más hacer.

Agredezco su colaboración

Respuesta Responder a este mensaje
#3 qwalgrande
31/05/2005 - 01:04 | Informe spam
Hola.

Tienes varias opciones:
- Realizar inserciones en las tablas y no es esa vista en concreto, lo
cual te evita el uso de triggers.
- Modificar la vista para adecuarla a tus necesidades (esto no resuelve
el problema de las inserciones y modificaciones, pero te facilitaría
bastante las cosas en general).
- Usar triggers de tipo "instead of" (creo que es lo que tú has llamado
"inside of"). Con ello y como su nombre indica, el trigger reemplaza lo que
le viene en el comando y lo sustituye por la acción en concreto que te
interesa (es decir, "en vez de" insertar o editar, hace lo que pone el
trigger). Ten en cuenta que los triggers saltan por cada petición de
modificación o inserción, es decir, pueden afectar a más de un registro cada
vez y también saltan si no afectan a ningún registro, pero tú lanzas un
update, por ejemplo.

qwalgrande

"De lo que ves créete la mitad, de lo que no ves no te creas nada"
V. del V.


"icaro" escribió en el mensaje
news:
Búen día

Deseo hacer una insert (o update) sobre una vista construida a partir de 2
tablas. desafortunadamente se ha omitido en la vista el campo de la llave
primaria de una de las tablas, porque es comun a ambas tablas, esto
obiamente
genera error en el momento de intentar una inserción.

¿como es posible capturar los datos entrantes, y repartirlos adecuadamente
a
cada una de las tablas?

Me han sugerido hacer un trigger que capture el evento, y usar "inside
of",
pero no se que más hacer.

Agredezco su colaboración

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