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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Alberto Poblacion
06/05/2010 - 10:41 | Informe spam
Repito mi respuesta anterior porque parece ser que se ha perdido la última
que envié. Al menos yo no la veo a través de mi cliente de News.

"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
Respuesta Responder a este mensaje
#3 Alberto Poblacion
06/05/2010 - 13:08 | 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
Respuesta Responder a este mensaje
#4 langosta
06/05/2010 - 14:37 | Informe spam
Alberto, creo que hay algo en el texto de tu respuesta que hace que esta
no se vea. Limberg podría usar google para leerla :(
Respuesta Responder a este mensaje
#5 Alberto Poblacion
06/05/2010 - 15:13 | Informe spam
"langosta" wrote in message
news:hrud7k$6hm$
Alberto, creo que hay algo en el texto de tu respuesta que hace que esta
no se vea. Limberg podría usar google para leerla :(



Es raro, porque la envié dos veces a través de NNTP y no salía en el
grupo. Al final la envié a través del foro HTTP, y aparentemente sí que me
la aceptó, pero sigue sin salir en las news. Sin embargo en el foro web sí
que aparece.
No hace falta usar google, se puede acceder a través de esta página:
http://www.microsoft.com/communitie....es.csharp
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida