Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Tigguer esta medio loco :(

Estas en el tema de Tigguer esta medio loco :( en el foro de SQL Server en Foros del Web. Hola a todos, necesito de su ayuda: Tengo 2 tablas "Primaria" y "Detalle" por decirlo asi. Tengo un store procedure que me graba un registro ...
  #1 (permalink)  
Antiguo 11/02/2010, 09:42
 
Fecha de Ingreso: octubre-2007
Mensajes: 59
Antigüedad: 16 años, 6 meses
Puntos: 0
Tigguer esta medio loco :(

Hola a todos, necesito de su ayuda:
Tengo 2 tablas "Primaria" y "Detalle" por decirlo asi.
Tengo un store procedure que me graba un registro en la tabla "Primaria" y tiene un parametro de salida que me devuelve el @@IDENTITY de dicho registro.
Todo me funciona muy bien, y a modo de prueba lo que hice en ASP fue capturar dicho valor y mostrarlo en un MsgBox, ya que necesito este valor para poder grabar en la tabla "Detalle" algunos otros registros.
Por ejemplo si el store procedure me grabo el registro con codigo 100, entonces el msgbox tambien me muestra 100 (obvio no).
El problema que tengo es medio raro y no se a que se deba. Cuando activo un trigguer "FOR INSERT" en la tabla "Primaria" me graba el registro con codigo 101(ya que es un identity) pero el msgbox me bota un valor diferente a 101, de esta manera ya no puedo grabar en la tabla "Detalle".
Ahora desactivo el trigguer y todo me funciona normal, no se hasta que punto un simple triguuer que uso para auditoria me pueda modificar este valor.
Gracias de antemano.
  #2 (permalink)  
Antiguo 11/02/2010, 11:56
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Tigguer esta medio loco :(

La impresión que me da es que el trigger te está insertando otro registro, con lo cual el @@IDENTITY será 102 en el ejemplo que pones.
El trigger FOR INSERT se ejecuta además de la operación de inserción, si no es esto lo que quieres utiliza INSTEAD INSERT y ahí pones el código de inserción para poder recuperar el valor correcto.
  #3 (permalink)  
Antiguo 11/02/2010, 13:23
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Tigguer esta medio loco :(

Ademas ya hemos dicho que si se desea obtener la IDENTITY por conexion (spid) debe utilizarse la funcion SCOPE_IDEINTITY(), ya que @@identity, es una variable GLOBAL del sistema y contiene la ultima identity creada (de cualquier conexion)
  #4 (permalink)  
Antiguo 11/02/2010, 14:36
 
Fecha de Ingreso: octubre-2007
Mensajes: 59
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Tigguer esta medio loco :(

Cita:
Iniciado por iislas Ver Mensaje
Ademas ya hemos dicho que si se desea obtener la IDENTITY por conexion (spid) debe utilizarse la funcion SCOPE_IDEINTITY(), ya que @@identity, es una variable GLOBAL del sistema y contiene la ultima identity creada (de cualquier conexion)

Pero al tener el trigger desactivado el valor de @@Identity es correcto ... solo cuando activo el trigger me bota un valor diferente al registro grabado en la tabla "Primaria" . [?][?][?][?][?]
  #5 (permalink)  
Antiguo 11/02/2010, 17:32
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Tigguer esta medio loco :(

Insisto, @@Identity, es una variable GLOBAL, a diferencia de la funcion SCOPE_IDENTITY()
  #6 (permalink)  
Antiguo 17/02/2010, 16:46
 
Fecha de Ingreso: octubre-2007
Mensajes: 59
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Tigguer esta medio loco :(

Despues de unos cuantos dias encontre el porque el trigger (desencadenador) me devuelve otro valor.

@@IDENTITY:
Contiene el último valor de identidad generado en cualquier tabla de la sesión actual. @@IDENTITY puede verse afectado por los desencadenadores y no devolver el valor de identidad esperado.

Aca les dejo el link
http://msdn.microsoft.com/es-es/library/ks9f57t0.aspx
  #7 (permalink)  
Antiguo 17/02/2010, 17:09
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Tigguer esta medio loco :(

¿Que fue lo que yo dije?, ¿Donde fue que me perdi o me perdiste?
  #8 (permalink)  
Antiguo 18/02/2010, 14:07
 
Fecha de Ingreso: octubre-2007
Mensajes: 59
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Tigguer esta medio loco :(

Cita:
Iniciado por iislas Ver Mensaje
¿Que fue lo que yo dije?, ¿Donde fue que me perdi o me perdiste?
si iislas tu respuesta es correcta pero necesitaba un porque?
  #9 (permalink)  
Antiguo 19/02/2010, 10:24
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Tigguer esta medio loco :(

Bueno, ya habia puesto mi comentario (no mas conversacion)

sisto, @@Identity, es una variable GLOBAL, a diferencia de la funcion SCOPE_IDENTITY()

Etiquetas: loco, medio
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:47.