Ayuda con SP

06/05/2010 - 00:02 por Limberg | Informe spam
ALTER PROCEDURE [dbo].[pAlmacenFiltro]
@Filtro VARCHAR(200),
@TotalReg BIGINT OUTPUT
AS
BEGIN
DECLARE @StrSQL VARCHAR(2500)
SELECT @StrSQL = 'SELECT @TotalReg = COUNT(*) FROM tbalmacenes WHERE
'+@Filtro
EXEC(@StrSQL)
END

Tengo este SP, deseo que en el parametro de salida @TotalReg, retorne la
cantidad de registo que cumple con la condicion del filtro @Filtro.
Intento ejecutarlo desde una ventana de consulta con esta sentencia:

DECLARE @TotalReg BIGINT
EXEC pAlmacenFiltro "TRUE", @TotalReg OUTPUT

Pero me da el siguiente mensaje de error:

Mens. 137, Nivel 15, Estado 1, Lnea 1
Debe declarar la variable escalar "@TotalReg".

Al parecer estoy asignando mal la variable @StrSQL

Saludos,
Limberg.



__________ Information from ESET NOD32 Antivirus, version of virus signature database 5089 (20100505) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com
 

Leer las respuestas

#1 Alberto Poblacion
06/05/2010 - 08:23 | Informe spam
"Limberg" wrote in message
news:
ALTER PROCEDURE [dbo].[pAlmacenFiltro]
@Filtro VARCHAR(200),
@TotalReg BIGINT OUTPUT
AS
BEGIN
DECLARE @StrSQL VARCHAR(2500)
SELECT @StrSQL = 'SELECT @TotalReg = COUNT(*) FROM tbalmacenes WHERE
'+@Filtro
EXEC(@StrSQL)
END

Tengo este SP, deseo que en el parametro de salida @TotalReg, retorne la
cantidad de registo que cumple con la condicion del filtro @Filtro.
Intento ejecutarlo desde una ventana de consulta con esta sentencia:

DECLARE @TotalReg BIGINT
EXEC pAlmacenFiltro "TRUE", @TotalReg OUTPUT

Pero me da el siguiente mensaje de error:

Mens. 137, Nivel 15, Estado 1, Lnea 1
Debe declarar la variable escalar "@TotalReg".

Al parecer estoy asignando mal la variable @StrSQL



Sí, más o menos. No puedes devolver el @TotalReg desde dentro de una
sentencia que está entre comillas y la lanzas de forma dinámica con un EXEC.
Es un ámbito distinto, por lo que ese @TotalReg no es el mismo que el
@TotalReg que tienes declarado fuera. En lugar de usar el EXEC, tendrías que
usar un sp_executesql parametrizado para que a su vez contenga ese parámetro
como output.

alter PROCEDURE [dbo].[pAlmacenFiltro]
@Filtro VARCHAR(200),
@TotalReg BIGINT OUTPUT
AS
BEGIN
DECLARE @StrSQL NVARCHAR(2500)
SELECT @StrSQL = N'SELECT @TotalReg1 = COUNT(*) FROM tbalmacenes WHERE
'+@Filtro
EXEC sp_executesql @StrSQL,
N'@TotalReg1 BIGINT OUTPUT, @Filtro1 VARCHAR(200)',
@TotalReg1=@TotalReg OUTPUT, @Filtro1=@Filtro
END
Go

DECLARE @TotalReg BIGINT
EXEC pAlmacenFiltro '1=1', @TotalReg OUTPUT
PRINT @TotalReg

Preguntas similares