Foros del Web » Programando para Internet » ASP Clásico »

Problemas con @@IDENTITY en SQL Server

Estas en el tema de Problemas con @@IDENTITY en SQL Server en el foro de ASP Clásico en Foros del Web. Hola a tod@s! Tengo una pag. asp con conexion a B.D. SQL Server; en donde ejecuta un Insert... estoy tratando de obtener el último valor ...
  #1 (permalink)  
Antiguo 17/08/2005, 16:39
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 22 años, 1 mes
Puntos: 0
Pregunta Problemas con @@IDENTITY en SQL Server

Hola a tod@s!

Tengo una pag. asp con conexion a B.D. SQL Server; en donde ejecuta un Insert... estoy tratando de obtener el último valor autogenerado por el Insert, y no me funciona; a través de:

SQL = "Select @@identity as id From Riesgos"

Alguien me podría ayudar?
  #2 (permalink)  
Antiguo 17/08/2005, 16:43
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 11 meses
Puntos: 98
Puedes poner tu sentencia SQL completa?
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 18/08/2005, 07:17
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 22 años, 1 mes
Puntos: 0
strSQL = "Insert Into Riesgos(rie_proyecto_cod, rie_fecha_gen, rie_premisa, rie_titulo) "
strSQL = strSQL & "values ('" & proyecto & "','" & fecha_generacion & "'," & premisa & ",'" & titulo & "')"
set strRS = Cnn.Execute(strSQL )

SQL = "Select @@identity as rie_id From Riesgos"
set RS = Cnn.Execute(SQL)

  #4 (permalink)  
Antiguo 18/08/2005, 07:38
 
Fecha de Ingreso: abril-2001
Mensajes: 293
Antigüedad: 23 años, 7 meses
Puntos: 0
una vez ejecutado el insert debes poner la siguiente sentencia

select @@identity as salida


luego en tu asp debes poner lo siguiente:


<%
sql="insert...."
set rs=conn.execute(....)
dato=rs("salida")
%>

saludos
  #5 (permalink)  
Antiguo 18/08/2005, 10:27
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 11 meses
Puntos: 98
Justo como te dijeron

Código:
strSQL = "Insert Into Riesgos(rie_proyecto_cod, rie_fecha_gen, rie_premisa, rie_titulo) "
strSQL = strSQL & "values ('" & proyecto & "','" & fecha_generacion & "'," & premisa & ",'" & titulo & "'); SELECT @@IDENTITY as ident"

Set rs = conn.Execute(strSQL)
id = rs("ident")
Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 18/08/2005, 13:10
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 22 años, 1 mes
Puntos: 0
u_goldman: tengo el código tal cual como lo colocastes y aún así me genera el siguiente error:

No se encontró el elemento en la colección que corresponde con el nombre o el ordinal pedido.

justo en la instrucción: id = rs("ident")

  #7 (permalink)  
Antiguo 18/08/2005, 13:23
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Cita:
Iniciado por cmunozp
una vez ejecutado el insert debes poner la siguiente sentencia

select @@identity as salida


luego en tu asp debes poner lo siguiente:


<%

sql="insert...."
set rs=conn.execute(....)
dato=rs("salida")
%>

saludos
Muy interesante...

Lethe, fíjate en el código y entiende lo que haces (un pequeño rapapolvo, no te lo tomes a mal pero no debes limitarte a poner las instrucciones que te den sin entenderlas. Jeje, creo que otros te lo darían aún peor que yo ). No es rs("ident") (fue un pequeño fallo de goldman, pero vamos la idea estaba clara), es rs("salida"), pues así le llamaste.
  #8 (permalink)  
Antiguo 18/08/2005, 13:35
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 22 años, 1 mes
Puntos: 0
un_tio: sí entiendo lo que hace el código... y el alias que le asigné fue: "ident" no "salida"... ese fue un ejemplo de nuestro amigo cmunozp.

El problema es que cuando hago referencia a ese campo de mi recordset no lo encuentra.... y no se por qué...

  #9 (permalink)  
Antiguo 18/08/2005, 13:40
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 11 meses
Puntos: 98


Prueba asi:

Código:
strSQL = "Insert Into Riesgos(rie_proyecto_cod, rie_fecha_gen, rie_premisa, rie_titulo) "
strSQL = strSQL & "values ('" & proyecto & "','" & fecha_generacion & "'," & premisa & ",'" & titulo & "'); SELECT @@IDENTITY as ident"

Set rs Server.CreateObject("ADODB.Recordset")
rs.Open strSQL, conn, 3, 3
id = rs("ident")
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #10 (permalink)  
Antiguo 18/08/2005, 13:58
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 22 años, 1 mes
Puntos: 0
ya lo intenté y... pues nada... sigue dando el mismo error...

  #11 (permalink)  
Antiguo 18/08/2005, 14:13
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 11 meses
Puntos: 98
El campo del que tratas de sacar el id, esta definido como campo llave? que tipo de dato es? por la estructura de esa tabla aqui...
Y el codigo de paso
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #12 (permalink)  
Antiguo 18/08/2005, 14:47
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 22 años, 1 mes
Puntos: 0
ok.

Sí, ese campo es clave y es autogenerado. Aquí te va la
estructura de la tabla: "Riesgos".

Nombre --------------- Tipo ----- Longitud
----------------------------------------------------------

rie_proyecto_cod ------- varchar -------- 20 (llave)
rie_riesgo_num --------- int -------------- 4 (llave)
rie_fecha_gen ----------- varchar -------- 10
rie_premisa ------------- bit -------------- 1
rie_titulo ---------------- varchar --------- 80

Nota:
El campo: rie_riesgo_num esta declarado como:
Identity: Yes (Not For Replication)
Identity Seed: 1
Identity Increment: 1

Y éste es el código:
Código:
strSQL = "Insert Into Riesgos(rie_proyecto_cod, rie_fecha_gen, rie_premisa, rie_titulo) "
strSQL = strSQL & "values ('" & proyecto & "','" & fecha_generacion & "'," & premisa & ",'" & titulo & "'); SELECT @@IDENTITY as ident"

Set rs Server.CreateObject("ADODB.Recordset")
rs.Open strSQL, Cnn, 3, 3
id = rs("ident")
  #13 (permalink)  
Antiguo 18/08/2005, 15:51
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 11 meses
Puntos: 98
Que raro que no funciona, estas ocupando SQL cierto? Trata asi:

Código:
strSQL = "Insert Into Riesgos(rie_proyecto_cod, rie_fecha_gen, rie_premisa, rie_titulo) "
strSQL = strSQL & "values ('" & proyecto & "','" & fecha_generacion & "'," & premisa & ",'" & titulo & "');SELECT @@IDENTITY AS ident; " & _
		"DECLARE @ident int; DECLARE ident_cursor CURSOR FOR SELECT @@IDENTITY; OPEN ident_cursor; FETCH NEXT FROM ident_cursor INTO @ident; "

Set rs Server.CreateObject("ADODB.Recordset")
rs.Open strSQL, Cnn, 3, 3
id = rs("ident")
Si no funciona, mejor que llamen a un programador porque sho no se!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #14 (permalink)  
Antiguo 18/08/2005, 16:34
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 22 años, 1 mes
Puntos: 0
no... tampoco funcionó...

Y lo peor es que ejecuté el query, tal cual, directamente desde la cónsola de SQL Server (SQL Query Analyzer) y lo realiza perfectamente...

No se que hacer....
  #15 (permalink)  
Antiguo 19/08/2005, 20:39
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 10 meses
Puntos: 6
Cita:
Iniciado por Lethe
un_tio: sí entiendo lo que hace el código... y el alias que le asigné fue: "ident" no "salida"... ese fue un ejemplo de nuestro amigo cmunozp.

El problema es que cuando hago referencia a ese campo de mi recordset no lo encuentra.... y no se por qué...

Cierto, perdona.
  #16 (permalink)  
Antiguo 20/08/2005, 08:57
 
Fecha de Ingreso: noviembre-2002
Ubicación: Caracas
Mensajes: 75
Antigüedad: 22 años, 1 mes
Puntos: 0
un_tio estas disculpado no te preocupes...

Aprovecho para comentar que ya logré que funcionara. El código que envie esta bien... lo que le faltaba era la siguiente instrucción; justo antes de: id = rs("ident")

Código:
'--Consigue el segundo resultado del objeto RecordSet
Set RS = Rs.NextRecordSet()
Gracias a todos por la ayuda prestada...
Salu2,
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 08:45.