Problema al ejecutar un SP dentro de otro SP

14/04/2009 - 00:16 por Felipe CR | Informe spam
Hola a todos
estoy tratando de hacer lo siguiente:

Tengo un SP Llamado: BuscarNombreVariedad

que hace lo siguiente:

PROCEDURE [dbo].[BuscarNombreVariedad]
( @PID NVarchar(50))
AS

Select Nombre from GEN_VARIEDAD where Id = @PId

Y funciona, ahora estoy tratando de llamarlo desde otro procedimiento
almacenado de la siguiente manera:

PROCEDURE [dbo].[InsertaVarFactura]
( @PVar Smallint,
@PCant smallint,
@PSeason smallint,
@PPrecio real,
@PTEURO real,
@PInvoice smallint )
AS

Declare @NombreVar NVarchar

exec @NombreVar = BuscarNombreVariedad @PVar

Insert Into EXP_INVOICEDETAIL(Invoice,IdVariedad,Variedad,Cantidad)
Values(@PInvoice,@PVar,@NombreVar,@PCant)

Y lo compila y todo, pero el campo Variedad de la Tabla
EXP_INVOICEDETAIL, en vez de guardar el nombre de la variedad, me
guarda un 0.

El Procedimiento BuscarNombreVariedad no lo puedo cambiar, porque lo
uso en muchas partes y tendria que cambiarlo en ellas, que me
aconsejan?

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
14/04/2009 - 01:55 | Informe spam
Felipe CR,

La forma en que llamas al procedimiento [BuscarNombreVariedad], no es la
correcta. De la forma que lo haces, lo que recive la variable @NombreVar es
el valor de retorno de el procedimiento, que es un valor entero, que por
defecto tiene el valor 0, y que se usa principalmente para indicar que la
ejecucion finalizo sin problemas (0) o que hubo algun error (<> 0).

Para lo que deseas hacer, te conviene usar un parametro de salida.


PROCEDURE [dbo].[BuscarNombreVariedad]
@PID smallint,
@NombreVar nvarchar(50) output -- no se cual es el tipo de dato de la col
AS
set nocount on;

Select @NombreVar = Nombre
from GEN_VARIEDAD
where Id = @PId;

return @@error;
go

create procedure [dbo].[InsertaVarFactura]
( @PVar Smallint,
@PCant smallint,
@PSeason smallint,
@PPrecio real,
@PTEURO real,
@PInvoice smallint )
AS

set nocount on;

Declare @NombreVar nvarchar(50);
declare @rv int;

exec @rv = BuscarNombreVariedad @PVar, @NombreVar output;

Insert Into EXP_INVOICEDETAIL(Invoice,IdVariedad,Variedad,Cantidad)
Values(@PInvoice,@PVar,@NombreVar,@PCant);

retunr @@error;
go

Para mas informacion, chequea la sentencia "create procedure" en los BOL.

AMB


"Felipe CR" wrote:

Hola a todos
estoy tratando de hacer lo siguiente:

Tengo un SP Llamado: BuscarNombreVariedad

que hace lo siguiente:

PROCEDURE [dbo].[BuscarNombreVariedad]
( @PID NVarchar(50))
AS

Select Nombre from GEN_VARIEDAD where Id = @PId

Y funciona, ahora estoy tratando de llamarlo desde otro procedimiento
almacenado de la siguiente manera:

PROCEDURE [dbo].[InsertaVarFactura]
( @PVar Smallint,
@PCant smallint,
@PSeason smallint,
@PPrecio real,
@PTEURO real,
@PInvoice smallint )
AS

Declare @NombreVar NVarchar

exec @NombreVar = BuscarNombreVariedad @PVar

Insert Into EXP_INVOICEDETAIL(Invoice,IdVariedad,Variedad,Cantidad)
Values(@PInvoice,@PVar,@NombreVar,@PCant)

Y lo compila y todo, pero el campo Variedad de la Tabla
EXP_INVOICEDETAIL, en vez de guardar el nombre de la variedad, me
guarda un 0.

El Procedimiento BuscarNombreVariedad no lo puedo cambiar, porque lo
uso en muchas partes y tendria que cambiarlo en ellas, que me
aconsejan?

Respuesta Responder a este mensaje
#2 Alejandro Mesa
14/04/2009 - 02:09 | Informe spam
Correccion:


PROCEDURE [dbo].[BuscarNombreVariedad]



create PROCEDURE [dbo].[BuscarNombreVariedad]
...


AMB


"Alejandro Mesa" wrote:

Felipe CR,

La forma en que llamas al procedimiento [BuscarNombreVariedad], no es la
correcta. De la forma que lo haces, lo que recive la variable @NombreVar es
el valor de retorno de el procedimiento, que es un valor entero, que por
defecto tiene el valor 0, y que se usa principalmente para indicar que la
ejecucion finalizo sin problemas (0) o que hubo algun error (<> 0).

Para lo que deseas hacer, te conviene usar un parametro de salida.


PROCEDURE [dbo].[BuscarNombreVariedad]
@PID smallint,
@NombreVar nvarchar(50) output -- no se cual es el tipo de dato de la col
AS
set nocount on;

Select @NombreVar = Nombre
from GEN_VARIEDAD
where Id = @PId;

return @@error;
go

create procedure [dbo].[InsertaVarFactura]
( @PVar Smallint,
@PCant smallint,
@PSeason smallint,
@PPrecio real,
@PTEURO real,
@PInvoice smallint )
AS

set nocount on;

Declare @NombreVar nvarchar(50);
declare @rv int;

exec @rv = BuscarNombreVariedad @PVar, @NombreVar output;

Insert Into EXP_INVOICEDETAIL(Invoice,IdVariedad,Variedad,Cantidad)
Values(@PInvoice,@PVar,@NombreVar,@PCant);

retunr @@error;
go

Para mas informacion, chequea la sentencia "create procedure" en los BOL.

AMB


"Felipe CR" wrote:

> Hola a todos
> estoy tratando de hacer lo siguiente:
>
> Tengo un SP Llamado: BuscarNombreVariedad
>
> que hace lo siguiente:
>
> PROCEDURE [dbo].[BuscarNombreVariedad]
> ( @PID NVarchar(50))
> AS
>
> Select Nombre from GEN_VARIEDAD where Id = @PId
>
> Y funciona, ahora estoy tratando de llamarlo desde otro procedimiento
> almacenado de la siguiente manera:
>
> PROCEDURE [dbo].[InsertaVarFactura]
> ( @PVar Smallint,
> @PCant smallint,
> @PSeason smallint,
> @PPrecio real,
> @PTEURO real,
> @PInvoice smallint )
> AS
>
> Declare @NombreVar NVarchar
>
> exec @NombreVar = BuscarNombreVariedad @PVar
>
> Insert Into EXP_INVOICEDETAIL(Invoice,IdVariedad,Variedad,Cantidad)
> Values(@PInvoice,@PVar,@NombreVar,@PCant)
>
> Y lo compila y todo, pero el campo Variedad de la Tabla
> EXP_INVOICEDETAIL, en vez de guardar el nombre de la variedad, me
> guarda un 0.
>
> El Procedimiento BuscarNombreVariedad no lo puedo cambiar, porque lo
> uso en muchas partes y tendria que cambiarlo en ellas, que me
> aconsejan?
>
Respuesta Responder a este mensaje
#3 Felipe CR
14/04/2009 - 15:27 | Informe spam
On 13 abr, 18:09, Alejandro Mesa
wrote:
Correccion:

> PROCEDURE [dbo].[BuscarNombreVariedad]

create PROCEDURE [dbo].[BuscarNombreVariedad]
...

AMB



"Alejandro Mesa" wrote:
> Felipe CR,

> La forma en que llamas al procedimiento [BuscarNombreVariedad], no es la
> correcta. De la forma que lo haces, lo que recive la variable @NombreVar es
> el valor de retorno de el procedimiento, que es un valor entero, que por
> defecto tiene el valor 0, y que se usa principalmente para indicar que la
> ejecucion finalizo sin problemas (0) o que hubo algun error (<> 0).

> Para lo que deseas hacer, te conviene usar un parametro de salida.

> PROCEDURE [dbo].[BuscarNombreVariedad]
> @PID smallint,
> @NombreVar nvarchar(50) output -- no se cual es el tipo de dato de la col
> AS
> set nocount on;

> Select @NombreVar = Nombre
> from GEN_VARIEDAD
> where Id = @PId;

> return @@error;
> go

> create procedure [dbo].[InsertaVarFactura]
> ( @PVar Smallint,
> @PCant smallint,
> @PSeason smallint,
> @PPrecio real,
> @PTEURO real,
> @PInvoice smallint )
> AS

> set nocount on;

> Declare @NombreVar nvarchar(50);
> declare @rv int;

> exec @rv = BuscarNombreVariedad @PVar, @NombreVar output;

> Insert Into EXP_INVOICEDETAIL(Invoice,IdVariedad,Variedad,Cantidad)
> Values(@PInvoice,@PVar,@NombreVar,@PCant);

> retunr @@error;
> go

> Para mas informacion, chequea la sentencia "create procedure" en los BOL.

> AMB

> "Felipe CR" wrote:

> > Hola a todos
> > estoy tratando de hacer lo siguiente:

> > Tengo un SP Llamado: BuscarNombreVariedad

> > que hace lo siguiente:

> > PROCEDURE [dbo].[BuscarNombreVariedad]
> > ( @PID NVarchar(50))
> > AS

> > Select Nombre from GEN_VARIEDAD where Id = @PId

> > Y funciona, ahora estoy tratando de llamarlo desde otro procedimiento
> > almacenado de la siguiente manera:

> > PROCEDURE [dbo].[InsertaVarFactura]
> > ( @PVar Smallint,
> > @PCant smallint,
> > @PSeason smallint,
> > @PPrecio real,
> > @PTEURO real,
> > @PInvoice smallint )
> > AS

> > Declare @NombreVar NVarchar

> > exec @NombreVar = BuscarNombreVariedad @PVar

> > Insert Into EXP_INVOICEDETAIL(Invoice,IdVariedad,Variedad,Cantidad)
> > Values(@PInvoice,@PVar,@NombreVar,@PCant)

> > Y lo compila y todo, pero el campo Variedad de la Tabla
> > EXP_INVOICEDETAIL, en vez de guardar el nombre de la variedad, me
> > guarda un 0.

> > El Procedimiento BuscarNombreVariedad no lo puedo cambiar, porque lo
> > uso en muchas partes y tendria que cambiarlo en ellas, que me
> > aconsejan?- Ocultar texto de la cita -

- Mostrar texto de la cita -



Ok, muy valiioso tu aporte, en verdad, muchas gracias, voy a hacer las
correcciones y les cuento.
Respuesta Responder a este mensaje
#4 Felipe CR
14/04/2009 - 15:36 | Informe spam
Funcionó perfectamente

Gracias!
Respuesta Responder a este mensaje
#5 Felipe CR
14/04/2009 - 18:44 | Informe spam
Hola

Ahora tengo otra duda

Como tuve que cambiar el SP BuscarNombreVariedad para que tuviera
parametros de salida, ahora tengo un problema al llamarlo desde VB
2008

El SP es el siguiente:

PROCEDURE [dbo].[BuscarNombreVariedad]
( @PID NVarchar(50),
@NombreVar nvarchar(50) output )
AS
set nocount on

Select @NombreVar = Nombre from GEN_VARIEDAD where Id = @PId

return @@error

Y lo llamo desde VB2008 de la siguiente forma:

Public Shared Function BuscarNombreVariedadXCodigo(ByVal Codigo As
Integer) As String
Try
'Se declaran las variables
Dim ConSQL As SqlClient.SqlConnection = New
SqlClient.SqlConnection()
Dim CommSQL As SqlClient.SqlCommand = New
SqlClient.SqlCommand()
Dim paramCodigo As Data.SqlClient.SqlParameter
Dim paramNombre As Data.SqlClient.SqlParameter
'Se alista la conexion
ConSQL.ConnectionString = Main.CnxStr
ConSQL.Open()
' Alisto el Command
CommSQL = New SqlClient.SqlCommand("BuscarNombreVariedad",
ConSQL)
CommSQL.CommandType = Data.CommandType.StoredProcedure
' Creo y asigno los datos al primero parametro
paramCodigo = CommSQL.Parameters.Add("@PID",
Data.SqlDbType.NVarChar)
paramCodigo.Direction = Data.ParameterDirection.Input
paramCodigo.Value = Codigo
' Creo y asigno el segundo parametro
paramNombre = CommSQL.Parameters.Add("@NombreVar",
Data.SqlDbType.NVarChar)
paramNombre.Direction = Data.ParameterDirection.Output
'Ejecuto el SP
CommSQL.ExecuteReader()
ConSQL.Close()
'Devuelvo el valor
Return paramNombre.Value
Catch ex As SqlClient.SqlException
MessageBox.Show(ex.Message)
Return " "
End Try
End Function

Pero cuando lo corro me devuelve la siguiente excepcion:

System.InvalidOperationException
{"String[1]:la propiedad Size tiene un tamaño no valido de 0."

En que estoy fallando?

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