Forums Últimos mensajes - Powered by IBM
 

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?
 

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?

Preguntas similares