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

Equivalente en SQL SERVER "Returning"

Estas en el tema de Equivalente en SQL SERVER "Returning" en el foro de SQL Server en Foros del Web. Hola a todos. de antemano muchas gracias Estoy empezando con SQL SERVER despues de haber trabajado con PostgreSQL y MySQL. la pregunta es como puedo ...
  #1 (permalink)  
Antiguo 13/07/2009, 20:45
Avatar de Lophophora  
Fecha de Ingreso: mayo-2005
Mensajes: 366
Antigüedad: 19 años
Puntos: 0
Equivalente en SQL SERVER "Returning"

Hola a todos.

de antemano muchas gracias

Estoy empezando con SQL SERVER despues de haber trabajado con PostgreSQL y MySQL.

la pregunta es como puedo hacer en SQL SERVER para despues de insertar un registro, me regrese el id del registro que acabamos de insertar.

En Postgres seria algo asi

insert into Tabla (nombre) Values ('PEPE') returning id;

Muchas gracias

Lophophora
__________________
P.L.U.R.
  #2 (permalink)  
Antiguo 13/07/2009, 21:52
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: Equivalente en SQL SERVER "Returning"

El valor lo puedes obtener con la funcion: SCOPE_IDENTITY()

DECLARE @MyValor INT
INSERT.........................
SET @MyValor = SCOPE_IDENTITY()
SELECT 'Mi valor', @MyValor
  #3 (permalink)  
Antiguo 14/07/2009, 10:47
Avatar de Lophophora  
Fecha de Ingreso: mayo-2005
Mensajes: 366
Antigüedad: 19 años
Puntos: 0
Respuesta: Equivalente en SQL SERVER "Returning"

Cita:
Iniciado por iislas Ver Mensaje
El valor lo puedes obtener con la funcion: SCOPE_IDENTITY()

DECLARE @MyValor INT
INSERT.........................
SET @MyValor = SCOPE_IDENTITY()
SELECT 'Mi valor', @MyValor

Hola muchas gracias por contestar, si lo ejecuto en el query analizer de SQL server si me regresa el valor, pero si lo hago desde JSP me sale el siguiente mensaje

com.microsoft.sqlserver.jdbc.SQLServerException: La instrucción no devolvió un conjunto de resultados.

el Query es el siguiente:

Código PHP:
String Query "DECLARE @MyValor INT; " 
"INSERT into Tabla (Nombre) Values ('PEPE'); " 
"SET @MyValor = SCOPE_IDENTITY();" +
"SELECT @MyValor as id;"
__________________
P.L.U.R.
  #4 (permalink)  
Antiguo 14/07/2009, 10:58
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Equivalente en SQL SERVER "Returning"

Tienes un campo identity en tu tabla?
Tambien prueba con IDENT_CURRENT('table_name') y @@IDENTITY.
Suerte!
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 14/07/2009, 11:19
Avatar de Lophophora  
Fecha de Ingreso: mayo-2005
Mensajes: 366
Antigüedad: 19 años
Puntos: 0
Respuesta: Equivalente en SQL SERVER "Returning"

Cita:
Iniciado por flaviovich Ver Mensaje
Tienes un campo identity en tu tabla?
Tambien prueba con IDENT_CURRENT('table_name') y @@IDENTITY.
Suerte!
Si, Si tengo el Identity, que justamente es el id que quiero recuperar.
__________________
P.L.U.R.
  #6 (permalink)  
Antiguo 14/07/2009, 11:26
Avatar de Lophophora  
Fecha de Ingreso: mayo-2005
Mensajes: 366
Antigüedad: 19 años
Puntos: 0
Respuesta: Equivalente en SQL SERVER "Returning"

Bueno, Creo que en Java las cosas funcionan diferente,

les comparto la solución que me funcionó.

Código PHP:
stmt conn.prepareStatement("INSERT INTO VEHICLES(LicenseNumber, ProdYear, Mileage) VALUES(?,?,?)"PreparedStatement.RETURN_GENERATED_KEYS);                                                
    
stmt.setString(1txtRegNum.getText());
    
stmt.setInt(2, (new Integer(txtProdYear.getText())).intValue());
    
stmt.setString(3txtMil.getText());
    
stmt.executeUpdate();
    
rs stmt.getGeneratedKeys();
    if(
rs.next())
    {
        
id=rs.getInt(1);
    } 
Muchas grtacias por todo

Lophophora
__________________
P.L.U.R.
  #7 (permalink)  
Antiguo 14/07/2009, 20:29
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: Equivalente en SQL SERVER "Returning"

Les comento las diferencias:

@@Identity.- El ultimo identity creado, no importando la tabla ni la conexion.
IDENT_CURRENT('tabla').- El identity que esta actualmente en la tabla.
SCOPE_IDENTITY().- El ultimo identity, creado por la conexion actual (spid)

Ustedes, tomen su decision, en base a lo que quieran obtener
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 11:25.