Store procedure no devuelve valor en parametros

04/10/2003 - 08:22 por Fernando | Informe spam
Hola grupo, tengo un store proc. que quiero que me devuelva el ID de un
cliente nuevo (en la tabla con la propiedad identity true) Inserta el
registro perfectamente pero solo me devuelve el numero de registros
afectados a la operacion (1) y no el ID correspondiente

CREATE PROCEDURE [InsertDatosClientes]
(@Dir [nvarchar] (30) = NULL,
@Cliente [nvarchar] (35) = NULL
)
AS
BEGIN TRANSACTION
INSERT [Musica].[dbo].[Cliente]
([RazonSocNom],
[Dir]
)
VALUES
(@Cliente,
@Dir
)
IF @@error <> 0
BEGIN
ROLLBACK TRAN
RETURN
END
COMMIT TRANSACTION
RETURN(@@identity)
GO


Lo llamo desde VB6 de esta manera en donde vec es array de tipo variant que
contiene los 2 elementos a insertar y en a recibo 1 (numeros de registros
afectados)

With Adocmd
.ActiveConnection = cnConexion
.CommandType = adCmdStoredProc
.CommandText = "InsertDatosClientes"
End With

Adocmd.Execute a, vec

Saludos,
Fernando

Preguntas similare

Leer las respuestas

#1 Mauricio Sthandier R.
05/10/2003 - 08:59 | Informe spam
Estás llamando mal al procedimiento, en tu ejecución 'Adocmd.Execute a, vec'
vec tomará el valor de filas afectadas, el segundo parámetro el cual en tu
caso es 1 inserción. Tienes que crear un parámetro de retorno para recibir
tu @@IDENTITY. Si no sabes como hacerlo te sugiero visitar el newsgroup de
ADO o la documentación correspondiente.

Si acaso esto no resolviese tu problema intenta guardar el valor de
@@IDENTITY inmediatamente después de efectuado el INSERT. Eventualmente
podrías necesitar usar SCOPE_IDENTITY o IDENT_CURRENT.

"Fernando" escribió en el mensaje
news:%23Kgh1%
Lo llamo desde VB6 de esta manera en donde vec es array de tipo variant que
contiene los 2 elementos a insertar y en a recibo 1 (numeros de registros
afectados)

With Adocmd
.ActiveConnection = cnConexion
.CommandType = adCmdStoredProc
.CommandText = "InsertDatosClientes"
End With

Adocmd.Execute a, vec
Respuesta Responder a este mensaje
#2 Fernando
06/10/2003 - 18:40 | Informe spam
Gracias por la sugerencia, ya estuve mirando documentacion acerca de los
parametros OUTPUT y creo que va a ser la solucion.
Saludos
Fernando

"Mauricio Sthandier R." <mauricio@@sthandier.net> escribió en el mensaje
news:#
Estás llamando mal al procedimiento, en tu ejecución 'Adocmd.Execute a,


vec'
vec tomará el valor de filas afectadas, el segundo parámetro el cual en tu
caso es 1 inserción. Tienes que crear un parámetro de retorno para recibir
tu @@IDENTITY. Si no sabes como hacerlo te sugiero visitar el newsgroup de
ADO o la documentación correspondiente.

Si acaso esto no resolviese tu problema intenta guardar el valor de
@@IDENTITY inmediatamente después de efectuado el INSERT. Eventualmente
podrías necesitar usar SCOPE_IDENTITY o IDENT_CURRENT.

"Fernando" escribió en el mensaje
news:%23Kgh1%
Lo llamo desde VB6 de esta manera en donde vec es array de tipo variant


que
contiene los 2 elementos a insertar y en a recibo 1 (numeros de registros
afectados)

With Adocmd
.ActiveConnection = cnConexion
.CommandType = adCmdStoredProc
.CommandText = "InsertDatosClientes"
End With

Adocmd.Execute a, vec


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida