Obtener campo identidad

18/02/2010 - 18:57 por Alberto | Informe spam
En un procedimiento almacenado inserto una serie de valores en una tabla
pero me gustaría que devolviese el valor de la clave primaria de la
nueva fila que es un campo identidad.

¿Cómo lo puedo hacer? Gracias

Preguntas similare

Leer las respuestas

#1 Gustavo Cantero
18/02/2010 - 19:10 | Informe spam
Alberto:
Deberías crear el guid antes de hacer el insert y después
devolverlo, por ejemplo, de esta manera:

DECLARE @id uniqueidentifier
SET @id = NEWID()
INSERT INTO Tabla (id) VALUES (@id)
SELECT @id

Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar

De: Alberto [mailto:]
Expuesto a las: Jueves, 18 de Febrero de 2010 02:57 p.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Obtener campo identidad
Asunto: Obtener campo identidad

En un procedimiento almacenado inserto una serie de valores en una tabla

pero me gustaría que devolviese el valor de la clave primaria de la
nueva fila que es un campo identidad.

¿Cómo lo puedo hacer? Gracias
Respuesta Responder a este mensaje
#2 Alberto
18/02/2010 - 19:34 | Informe spam
El 18/02/2010 19:10, Gustavo Cantero escribió:
DECLARE @id uniqueidentifier
SET @id = NEWID()
INSERT INTO Tabla (id) VALUES (@id)
SELECT @id



Me aparece el siguiente error: Conflicto de tipos de operandos:
uniqueidentifier es incompatible con int

La columna con el campo identidad es de tipo int.

Estoy probando a hacer lo siguiente. El procedimiento almacenado es este:

Insert into Entrada
(IDProveedor, NúmeroDocumento, FechaEntrada)
Values
(@IDProveedor, @NúmeroDocumento, @FechaEntrada)

select @@Identity

Si lo ejecuto desde el management studio, me devuelve el valor identidad
correcto pero no lo consigo leer desde c#. Llamo al método ExecuteReader
que devuelve un SqlDataReader pero viene con el valor nulo.

Os agradecería que me indicaseis cómo leer el valor de retorno. Gracias
Respuesta Responder a este mensaje
#3 Gustavo Cantero
18/02/2010 - 20:08 | Informe spam
Alberto:
Disculpa, entendí que estabas utilizando un campo
"uniqueidentifier". Prueba de agregar el SET NOCOUNT a tu procedimiento
así:


SET NOCOUNT ON

Insert into Entrada (IDProveedor, NúmeroDocumento, FechaEntrada)
Values (@IDProveedor, @NúmeroDocumento, @FechaEntrada)

select @@Identity


Otra posibilidad sería agregando un parámetro del tipo
"ReturnValue" y que tu procedimiento fuera así:


SET NOCOUNT ON

Insert into Entrada (IDProveedor, NúmeroDocumento, FechaEntrada)
Values (@IDProveedor, @NúmeroDocumento, @FechaEntrada)

RETURN @@Identity


El código en C# sería algo así:


MiComando.CommandName = ..; //Nombre del SP
MiComando.Parameters.Add.. // Valores a insertar
MiComando.Parameters.Add("@ID", SqlDbType.Int).Direction ParameterDirection.ReturnValue;
MiComando.ExecuteNonQuery();
int ID = (int)MiComando.Parameters["@ID"];


Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar



De: Alberto [mailto:]
Expuesto a las: Jueves, 18 de Febrero de 2010 03:35 p.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Obtener campo identidad
Asunto: Re: Obtener campo identidad

El 18/02/2010 19:10, Gustavo Cantero escribió:
DECLARE @id uniqueidentifier
SET @id = NEWID()
INSERT INTO Tabla (id) VALUES (@id)
SELECT @id



Me aparece el siguiente error: Conflicto de tipos de operandos:
uniqueidentifier es incompatible con int

La columna con el campo identidad es de tipo int.

Estoy probando a hacer lo siguiente. El procedimiento almacenado es
este:

Insert into Entrada
(IDProveedor, NúmeroDocumento, FechaEntrada)
Values
(@IDProveedor, @NúmeroDocumento, @FechaEntrada)

select @@Identity

Si lo ejecuto desde el management studio, me devuelve el valor identidad

correcto pero no lo consigo leer desde c#. Llamo al método ExecuteReader

que devuelve un SqlDataReader pero viene con el valor nulo.

Os agradecería que me indicaseis cómo leer el valor de retorno. Gracias
Respuesta Responder a este mensaje
#4 Alberto
18/02/2010 - 22:16 | Informe spam
Muchísimas gracias.

Al final conseguí leer el valor @identity llamando al método
executeReader del comando y sin pasarle ningún parámetro de salida.
Supongo que no será tan eficiente ya que tiene que crear un objeto de
tipo DataReader. Lo intentaré como me has indicado.

El 18/02/2010 20:08, Gustavo Cantero escribió:
Alberto:
Disculpa, entendí que estabas utilizando un campo
"uniqueidentifier". Prueba de agregar el SET NOCOUNT a tu procedimiento
así:


SET NOCOUNT ON

Insert into Entrada (IDProveedor, NúmeroDocumento, FechaEntrada)
Values (@IDProveedor, @NúmeroDocumento, @FechaEntrada)

select @@Identity


Otra posibilidad sería agregando un parámetro del tipo
"ReturnValue" y que tu procedimiento fuera así:


SET NOCOUNT ON

Insert into Entrada (IDProveedor, NúmeroDocumento, FechaEntrada)
Values (@IDProveedor, @NúmeroDocumento, @FechaEntrada)

RETURN @@Identity


El código en C# sería algo así:


MiComando.CommandName = ..; //Nombre del SP
MiComando.Parameters.Add.. // Valores a insertar
MiComando.Parameters.Add("@ID", SqlDbType.Int).Direction > ParameterDirection.ReturnValue;
MiComando.ExecuteNonQuery();
int ID = (int)MiComando.Parameters["@ID"];


Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar



De: Alberto [mailto:]
Expuesto a las: Jueves, 18 de Febrero de 2010 03:35 p.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Obtener campo identidad
Asunto: Re: Obtener campo identidad

El 18/02/2010 19:10, Gustavo Cantero escribió:
DECLARE @id uniqueidentifier
SET @id = NEWID()
INSERT INTO Tabla (id) VALUES (@id)
SELECT @id



Me aparece el siguiente error: Conflicto de tipos de operandos:
uniqueidentifier es incompatible con int

La columna con el campo identidad es de tipo int.

Estoy probando a hacer lo siguiente. El procedimiento almacenado es
este:

Insert into Entrada
(IDProveedor, NúmeroDocumento, FechaEntrada)
Values
(@IDProveedor, @NúmeroDocumento, @FechaEntrada)

select @@Identity

Si lo ejecuto desde el management studio, me devuelve el valor identidad

correcto pero no lo consigo leer desde c#. Llamo al método ExecuteReader

que devuelve un SqlDataReader pero viene con el valor nulo.

Os agradecería que me indicaseis cómo leer el valor de retorno. Gracias


Respuesta Responder a este mensaje
#5 alskare
21/02/2010 - 23:44 | Informe spam
No hace falta que crees el DataReader. Si sólo intentas leer el Identity,
puedes ejecutar el método ExecuteScalar, algo así como:

int NewId = Int.Parse(cmd.ExecuteScalar.ToString());


Blog: http://alskare.wordpress.com


"Alberto" escribió en el mensaje
news:ekhRx%
Muchísimas gracias.

Al final conseguí leer el valor @identity llamando al método executeReader
del comando y sin pasarle ningún parámetro de salida.
Supongo que no será tan eficiente ya que tiene que crear un objeto de tipo
DataReader. Lo intentaré como me has indicado.

El 18/02/2010 20:08, Gustavo Cantero escribió:
Alberto:
Disculpa, entendí que estabas utilizando un campo
"uniqueidentifier". Prueba de agregar el SET NOCOUNT a tu procedimiento
así:


SET NOCOUNT ON

Insert into Entrada (IDProveedor, NúmeroDocumento, FechaEntrada)
Values (@IDProveedor, @NúmeroDocumento, @FechaEntrada)

select @@Identity


Otra posibilidad sería agregando un parámetro del tipo
"ReturnValue" y que tu procedimiento fuera así:


SET NOCOUNT ON

Insert into Entrada (IDProveedor, NúmeroDocumento, FechaEntrada)
Values (@IDProveedor, @NúmeroDocumento, @FechaEntrada)

RETURN @@Identity


El código en C# sería algo así:


MiComando.CommandName = ..; //Nombre del SP
MiComando.Parameters.Add.. // Valores a insertar
MiComando.Parameters.Add("@ID", SqlDbType.Int).Direction >> ParameterDirection.ReturnValue;
MiComando.ExecuteNonQuery();
int ID = (int)MiComando.Parameters["@ID"];


Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar



De: Alberto [mailto:]
Expuesto a las: Jueves, 18 de Febrero de 2010 03:35 p.m.
Expuesto en: microsoft.public.es.sqlserver
Conversación: Obtener campo identidad
Asunto: Re: Obtener campo identidad

El 18/02/2010 19:10, Gustavo Cantero escribió:
DECLARE @id uniqueidentifier
SET @id = NEWID()
INSERT INTO Tabla (id) VALUES (@id)
SELECT @id



Me aparece el siguiente error: Conflicto de tipos de operandos:
uniqueidentifier es incompatible con int

La columna con el campo identidad es de tipo int.

Estoy probando a hacer lo siguiente. El procedimiento almacenado es
este:

Insert into Entrada
(IDProveedor, NúmeroDocumento, FechaEntrada)
Values
(@IDProveedor, @NúmeroDocumento, @FechaEntrada)

select @@Identity

Si lo ejecuto desde el management studio, me devuelve el valor identidad

correcto pero no lo consigo leer desde c#. Llamo al método ExecuteReader

que devuelve un SqlDataReader pero viene con el valor nulo.

Os agradecería que me indicaseis cómo leer el valor de retorno. Gracias





Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida