Trigger con Instead OF

19/11/2004 - 18:35 por Anonimo | Informe spam
Hola amigos, tengo un triger de actualización (Update) con instead of
(utilizo instead of debido a que existen campos text en mi tabla y con "for
update" no me permite), con los datos de la tabla inserted actualizo en
otras 3 bases de datos que tienen la misma tabla y por último actualizo la
tabla que contiene al trigger. Todas estas actualizaciones las hago con
sp_executesql. Las tablas de las otras bases de datos son actualizadas
satisfactoriamente, pero la tabla que contiene al trigger no actualiza. Le
he puesto un print @@rowcount y me indica que hizo la actualizacion, incluso
el mensaje del servidor: "1 fila actualizada". Pero no actualiza nada. Lo
mismo me sucede con el trigger de inserción, Cuando hago el update sin
utilizar sp_executesql si funciona. ¿a que se puede deber?

Gracias por sus respuestas.

Preguntas similare

Leer las respuestas

#6 Maxi
19/11/2004 - 21:07 | Informe spam
Me ganaste :) pero opino 100% igual a vos!! es mas no se como funciona eso y
ni me quiero imaginar ese Servidor como esta :(


Salu2
Maxi


"Javier Loria" escribió en el mensaje
news:e0Ok%
Mostrar la cita
#7 Anonimo
19/11/2004 - 21:29 | Informe spam
Lo que pasa es que los campos de las tablas van a ir aumentando y eso no
está en mis manos, y el stored procedure igual debe seguir funcionando
transparentemente, además de ello 2 tablas no siempren tendran los mismos
campos

"Javier Loria" wrote in message
news:e0Ok%
Mostrar la cita
#8 Maxi
19/11/2004 - 21:35 | Informe spam
ahh eso si que es un problema de diseño!! como que los campos iran
aumentando?


Salu2
Maxi


<a> escribió en el mensaje news:
Mostrar la cita
#9 Anonimo
19/11/2004 - 21:38 | Informe spam
Es una historia larga, pero lo que te puedo decir es que hay programadores
que se encargan de aumentar cosas a su sistemas y añaden campos.

"Maxi" wrote in message
news:%
Mostrar la cita
#10 Miguel Egea
23/11/2004 - 00:05 | Informe spam
Un ejemplo sencillo de lo que te pasa lo puedes reproducir así

use tempdb
go

go

create table t (id int)
create table t2 (id int)
go
create trigger tr_t on t instead of insert
as
begin
declare @cuantos int

Select @cuantos=sum(id) from inserted
exec sp_executesql N'insert into t values (@t) insert into t2 values(@t)
',N'@t int',@cuantos
end
go
begin tran
insert into t values (2)
select * from t
select * from t2
commit


El problema es que la ejecución dinámica vuelve a disparar el trigger
instead of, creo que es así by design, es decir que como no es un trigger de
'antes' sino de 'en lugar' si se dispara y no se hace la acción de la
insercción en el mismo contexto no funciona. Tampoco te servirá usar
getToken y bindtoken, porque la transacción si es la misma, pero no el
contexto de ejecución.

Yo usaría un truquillo, crea una vista que se llame como tu tabla, resultará
practicamente transparente a los usuarios, sobre esa vista pon el trigger
instead of, pero haz que tu ejecución dinámica actue sobre la tabla.

Suerte.


-
Miguel Egea Gómez
Microsoft SQL-Server MVP
Webmaster de PortalSql.Com
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

<a> escribió en el mensaje news:%
Mostrar la cita
Ads by Google
Search Busqueda sugerida