Identity y Triggers

08/06/2004 - 16:48 por Pablo Higuimarán | Informe spam
Hola a todos.
El problema que se me plantea es el siguiente:
Tengo una tabla con una columna IDENTITY.
Cuando inserto nuevos registros en dicha tabla, luego
reviso el valor de @@IDENTITY y se cual fué la clave
asignada.
Ahora, cuando creo un TRIGGER para insersión en dicha
tabla, ya no me sirve el valor de @@IDENTITY ya que este
queda en NULL.
Consulté el help, y dice que esto efectivamente es así.
La pregunta es ¿como puedo hacer para obtener este valor
luego de insertar un nuevo registro?

P.D. Podría ejecutar la insersión y luego llamar a un proc
almacenado que ejecute el mismo codigo que el trigger,
pero no es lo que quiero. Quiero que el TRIGGER quede por
si me insertan valores desde otra aplicación

Saludos y gracias de antemano

Pablo Higuimarán
Analista de Sistemas
Montevideo Uruguay

Preguntas similare

Leer las respuestas

#1 Pablo Higuimarán
08/06/2004 - 17:24 | Informe spam
Tengo SQL 7, lo comento porque estuve buscando por allí y
encontré la función SCOPE_IDENTITY(). Pero en la versión 7
no existe.

gracias
Respuesta Responder a este mensaje
#2 Maxi
08/06/2004 - 17:30 | Informe spam
Hola, eso es asi porque el trigger esta dentro de la transaccion y al no
hacer el commit, no vas a tener el identity!!

Ahora bien, porque en un Trigger queres ese valor? para que lo necesitas
dentro del Trigger?

Bye


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Pablo Higuimarán" escribió en el
mensaje news:198a701c44d67$a5962fb0$
Hola a todos.
El problema que se me plantea es el siguiente:
Tengo una tabla con una columna IDENTITY.
Cuando inserto nuevos registros en dicha tabla, luego
reviso el valor de @@IDENTITY y se cual fué la clave
asignada.
Ahora, cuando creo un TRIGGER para insersión en dicha
tabla, ya no me sirve el valor de @@IDENTITY ya que este
queda en NULL.
Consulté el help, y dice que esto efectivamente es así.
La pregunta es ¿como puedo hacer para obtener este valor
luego de insertar un nuevo registro?

P.D. Podría ejecutar la insersión y luego llamar a un proc
almacenado que ejecute el mismo codigo que el trigger,
pero no es lo que quiero. Quiero que el TRIGGER quede por
si me insertan valores desde otra aplicación

Saludos y gracias de antemano

Pablo Higuimarán
Analista de Sistemas
Montevideo Uruguay




Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.698 / Virus Database: 455 - Release Date: 02/06/2004
Respuesta Responder a este mensaje
#3 Javier Loria
08/06/2004 - 17:52 | Informe spam
Hola:
En SQL 7.0 estas muy limitado. Una opcion es justo despues de hacer la
insercion usar la llave primaria natura para obtener el valor. Ejemplo:
==INSERT Tabla(Col1, Col2, Col3)
VALUES(@Valor1, @Valor2, @Valor3)
SELECT @NuevoID=ID
FROM Tabla
WHERE Col1=@Valor AND Col2=@Valor2
==Si no existe esta llave natural o si esta llave natural es el identity,
entonces te recomiendo que no uses identity para esto (en realidad solo en
muy, muy, muy pocas ocasiones uso identity).
En este caso es mejor cambiar el INSERT por
¾GIN TRAN
SELECT @Id=COALESCE(MAX(Id),0)+1 FROM Tabla
INSERT Tabla(Id, Col1, Col2, Col3)
VALUES(@Id, @Valor1, @Valor2, @Valor3)
COMMIT
= Saludos,

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.
Pablo Higuimarán escribio:
Tengo SQL 7, lo comento porque estuve buscando por allí y
encontré la función SCOPE_IDENTITY(). Pero en la versión 7
no existe.

gracias
Respuesta Responder a este mensaje
#4 Pablo Higuimarán
08/06/2004 - 19:13 | Informe spam
No, no es dentro del trigger que necesito el identificador
utilizado.
Lo necesito despues del trigger.
El problema es que el trigger me modifica el valor de
@@IDENTIFY

Saludos y gracias
Respuesta Responder a este mensaje
#5 Anonimo
08/06/2004 - 19:21 | Informe spam
¿Por que no recomiendas el uso de Identity?
Te cuento que estoy utilizando identity para permitir que
sea mas sencilla la recodificación de mis datos.
Es decir, por ejemplo, tengo una tabla 'Productos' en la
cual mis usuarios realizan busquedas por 'numero' (que
sería la clave natural) o por nombre.
Pero como 2 por 3 tienen necesidad de cambiar los numeros
de los productos, pensé en utilizar Identity y usar esa
clave en todas las tablas relacionadas.
De todas formas voy a utilizar tu ejemplo de BEGIN TRA
solo pensé que era mas sencillo utilizar Identity

Saludos y Gracias
Pablo Higuimarán
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida