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

#6 Daniel Ulfe
06/05/2010 - 15:45 | Informe spam
Estas usando SQL dinamico... la variable "@TotalReg" esta definida en el
SP... pero NO es valida dentro del contexto de ese SQL. (2 contextos
diferentes)

Una alternativa seria el crear una tabla temporal
(http://www.sqlteam.com/article/temporary-tables)... en el SP, en el SQL
dinamico insertar el valor "COUNT(*)" en esa tabla... y despues leerla
en el SP.

En otras palabras... esa tabla temporal seria como un "buffer" o
"gateway" entre el SP y el SQL Dinamico.

Daniel.

On 5/5/2010 6:02 PM, Limberg wrote:
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




Respuesta Responder a este mensaje
#7 Alberto Poblacion
06/05/2010 - 16:13 | Informe spam
"Daniel Ulfe" wrote in message
news:
Estas usando SQL dinamico... la variable "@TotalReg" esta definida en el
SP... pero NO es valida dentro del contexto de ese SQL. (2 contextos
diferentes)

Una alternativa seria el crear una tabla temporal
(http://www.sqlteam.com/article/temporary-tables)... en el SP, en el SQL
dinamico insertar el valor "COUNT(*)" en esa tabla... y despues leerla en
el SP.

En otras palabras... esa tabla temporal seria como un "buffer" o "gateway"
entre el SP y el SQL Dinamico.



Hay otra forma más eficiente, que consiste en ejecutar sp_executesql con
un parámetro de salida. Puse el código completo en otro mensaje, pero por
alguna razón incomprensible, el mensaje no aparece en las news. Lo he
enviado varias veces, no solo por nntp, sino también a través del foro web.
Este último sí que aparece, pero solo en la web, no en las news.
Respuesta Responder a este mensaje
#8 Daniel Ulfe
06/05/2010 - 19:09 | Informe spam
Tienes toda la razon...

Limberg en esta pagina hay ejemplos de lo que Alberto indica.

http://msdn.microsoft.com/en-us/lib...88001.aspx

Daniel.

On 5/6/2010 10:13 AM, Alberto Poblacion wrote:
"Daniel Ulfe" wrote in message
news:
Estas usando SQL dinamico... la variable "@TotalReg" esta definida en
el SP... pero NO es valida dentro del contexto de ese SQL. (2
contextos diferentes)

Una alternativa seria el crear una tabla temporal
(http://www.sqlteam.com/article/temporary-tables)... en el SP, en el
SQL dinamico insertar el valor "COUNT(*)" en esa tabla... y despues
leerla en el SP.

En otras palabras... esa tabla temporal seria como un "buffer" o
"gateway" entre el SP y el SQL Dinamico.



Hay otra forma más eficiente, que consiste en ejecutar sp_executesql con
un parámetro de salida. Puse el código completo en otro mensaje, pero
por alguna razón incomprensible, el mensaje no aparece en las news. Lo
he enviado varias veces, no solo por nntp, sino también a través del
foro web. Este último sí que aparece, pero solo en la web, no en las news.

Respuesta Responder a este mensaje
#9 Limberg
07/05/2010 - 19:02 | Informe spam
Gracias a todos por sus recomendaciones,
Estoy intentando hacer correr el SP de Alberto, pero tengo un mensaje de
error:
Podrían decirme a que se debe este mensaje?
Mens 214, Nivel 16, Estado 2, Procedimiento sp_executesql, Lnea 1

El procedimiento espera un parmetro '@statement' de tipo
'ntext/nchar/nvarchar'.

Saludos,
Limberg.



"Limberg" escribió en el mensaje
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

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





__________ Information from ESET NOD32 Antivirus, version of virus
signature database 5092 (20100506) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com








__________ Information from ESET NOD32 Antivirus, version of virus signature database 5095 (20100507) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com
Respuesta Responder a este mensaje
#10 Limberg
07/05/2010 - 21:58 | Informe spam
Gracias a todos, ya está solucionado, habia copiado mal esta linea:

DECLARE @StrSQL NVARCHAR(2500)

Saludos,
Limberg.



"Limberg" escribió en el mensaje
news:
Gracias a todos por sus recomendaciones,
Estoy intentando hacer correr el SP de Alberto, pero tengo un mensaje de
error:
Podrían decirme a que se debe este mensaje?
Mens 214, Nivel 16, Estado 2, Procedimiento sp_executesql, Lnea 1

El procedimiento espera un parmetro '@statement' de tipo
'ntext/nchar/nvarchar'.

Saludos,
Limberg.



"Limberg" escribió en el mensaje
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

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





__________ Information from ESET NOD32 Antivirus, version of virus
signature database 5092 (20100506) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com








__________ Information from ESET NOD32 Antivirus, version of virus
signature database 5095 (20100507) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com





__________ Information from ESET NOD32 Antivirus, version of virus
signature database 5096 (20100507) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com








__________ Information from ESET NOD32 Antivirus, version of virus signature database 5096 (20100507) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida