SP para executar querys em tabelas

31/05/2007 - 15:40 por Nuno Santos | Informe spam
Holá grupo, estoy con un problemilla, como puedo hacer para ejecutar una
série de querys que estan guardadas en una tabla de mi BD, esto es la SP que
estoy tentando hacer:

CREATE PROCEDURE GetListaValidacoes
@tabela as varchar(50),
)AS


DECLARE @query AS varchar(4000)
SET @query =''

DECLARE @numreg AS int
SET @numreg=0

BEGIN TRAN

DECLARE DEST_cursor1 CURSOR FOR
SELECT Query FROM miTabla WHERE tabela=@tabela

OPEN DEST_cursor1
if (@@error<>0) goto ERROR

FETCH NEXT FROM DEST_cursor1 INTO @query

WHILE (@@FETCH_STATUS <> -1)
BEGIN
EXEC (@query)
IF @numreg=0 /* como tener este valor preenchido en la ejecución de la
query???? */
BEGIN
FETCH NEXT FROM DEST_cursor1 INTO @query
end
ELSE
begin
PRINT @numreg
BREAK
end
end

ERROR:
IF Cursor_Status('local','DEST_cursor1') <> -1
BEGIN
CLOSE DEST_cursor1
DEALLOCATE DEST_cursor1
END
ROLLBACK
RETURN -1
GO

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera (MVP)
31/05/2007 - 18:33 | Informe spam
Cuál es el problema exacto ?

Para saber la cantidad de filas afectadas, usa @@ROWCOUNT


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Nuno Santos" wrote:

Holá grupo, estoy con un problemilla, como puedo hacer para ejecutar una
série de querys que estan guardadas en una tabla de mi BD, esto es la SP que
estoy tentando hacer:

CREATE PROCEDURE GetListaValidacoes
@tabela as varchar(50),
)AS


DECLARE @query AS varchar(4000)
SET @query =''

DECLARE @numreg AS int
SET @numreg=0

BEGIN TRAN

DECLARE DEST_cursor1 CURSOR FOR
SELECT Query FROM miTabla WHERE tabela=@tabela

OPEN DEST_cursor1
if (@@error<>0) goto ERROR

FETCH NEXT FROM DEST_cursor1 INTO @query

WHILE (@@FETCH_STATUS <> -1)
BEGIN
EXEC (@query)
IF @numreg=0 /* como tener este valor preenchido en la ejecución de la
query???? */
BEGIN
FETCH NEXT FROM DEST_cursor1 INTO @query
end
ELSE
begin
PRINT @numreg
BREAK
end
end

ERROR:
IF Cursor_Status('local','DEST_cursor1') <> -1
BEGIN
CLOSE DEST_cursor1
DEALLOCATE DEST_cursor1
END
ROLLBACK
RETURN -1
GO




Respuesta Responder a este mensaje
#2 Nuno Santos
31/05/2007 - 19:54 | Informe spam
Gracias por responder,
Lo que quiero saber es la cantidad de registros que me dá la query. La
query que está guardad en la tabla es siempre del tipo :
SELECT COUNT(*) as NumRegistros From miTabla WHERE

NS

"Gustavo Larriera (MVP)"
wrote in message news:
Cuál es el problema exacto ?

Para saber la cantidad de filas afectadas, usa @@ROWCOUNT


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Nuno Santos" wrote:

Holá grupo, estoy con un problemilla, como puedo hacer para ejecutar una
série de querys que estan guardadas en una tabla de mi BD, esto es la SP
que
estoy tentando hacer:

CREATE PROCEDURE GetListaValidacoes
@tabela as varchar(50),
)AS


DECLARE @query AS varchar(4000)
SET @query =''

DECLARE @numreg AS int
SET @numreg=0

BEGIN TRAN

DECLARE DEST_cursor1 CURSOR FOR
SELECT Query FROM miTabla WHERE tabela=@tabela

OPEN DEST_cursor1
if (@@error<>0) goto ERROR

FETCH NEXT FROM DEST_cursor1 INTO @query

WHILE (@@FETCH_STATUS <> -1)
BEGIN
EXEC (@query)
IF @numreg=0 /* como tener este valor preenchido en la ejecución de la
query???? */
BEGIN
FETCH NEXT FROM DEST_cursor1 INTO @query
end
ELSE
begin
PRINT @numreg
BREAK
end
end

ERROR:
IF Cursor_Status('local','DEST_cursor1') <> -1
BEGIN
CLOSE DEST_cursor1
DEALLOCATE DEST_cursor1
END
ROLLBACK
RETURN -1
GO




Respuesta Responder a este mensaje
#3 Gustavo Larriera (MVP)
31/05/2007 - 20:06 | Informe spam
Entiendo que querés ejecutar dinámicamente una query y obtener el valor
resultante que la query calcula.

Para eso usa sp_executesql en vez de EXEC. Proporciona los parámetros de
tipo OUTPUT apropiados para obtener el valor resultado. Esto es un ejemplo
tomado del artículo que menciono más abajo:

DECLARE @sql nvarchar(4000), -- nvarchar(MAX) en SQL 2005.
@col sysname,
@min varchar(20)
SELECT @col = N'au_fname'
SELECT @sql = N'SELECT @min = convert(varchar(20), MIN(' + @col +
N')) FROM authors'
EXEC sp_executesql @sql, N'@min varchar(20) OUTPUT', @min OUTPUT
SELECT @min

Podés aprender los detalles en este artículo de Erland Sommarskog:

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Nuno Santos" wrote:

Gracias por responder,
Lo que quiero saber es la cantidad de registros que me dá la query. La
query que está guardad en la tabla es siempre del tipo :
SELECT COUNT(*) as NumRegistros From miTabla WHERE

NS

"Gustavo Larriera (MVP)"
wrote in message news:
> Cuál es el problema exacto ?
>
> Para saber la cantidad de filas afectadas, usa @@ROWCOUNT
>
>
> Gustavo Larriera, Microsoft MVP
> https://mvp.support.microsoft.com/p...o.Larriera
> Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
>
>
>
> "Nuno Santos" wrote:
>
>> Holá grupo, estoy con un problemilla, como puedo hacer para ejecutar una
>> série de querys que estan guardadas en una tabla de mi BD, esto es la SP
>> que
>> estoy tentando hacer:
>>
>> CREATE PROCEDURE GetListaValidacoes
>> @tabela as varchar(50),
>> )AS
>>
>>
>> DECLARE @query AS varchar(4000)
>> SET @query =''
>>
>> DECLARE @numreg AS int
>> SET @numreg=0
>>
>> BEGIN TRAN
>>
>> DECLARE DEST_cursor1 CURSOR FOR
>> SELECT Query FROM miTabla WHERE tabela=@tabela
>>
>> OPEN DEST_cursor1
>> if (@@error<>0) goto ERROR
>>
>> FETCH NEXT FROM DEST_cursor1 INTO @query
>>
>> WHILE (@@FETCH_STATUS <> -1)
>> BEGIN
>> EXEC (@query)
>> IF @numreg=0 /* como tener este valor preenchido en la ejecución de la
>> query???? */
>> BEGIN
>> FETCH NEXT FROM DEST_cursor1 INTO @query
>> end
>> ELSE
>> begin
>> PRINT @numreg
>> BREAK
>> end
>> end
>>
>> ERROR:
>> IF Cursor_Status('local','DEST_cursor1') <> -1
>> BEGIN
>> CLOSE DEST_cursor1
>> DEALLOCATE DEST_cursor1
>> END
>> ROLLBACK
>> RETURN -1
>> GO
>>
>>
>>
>>



Respuesta Responder a este mensaje
#4 Nuno Santos
01/06/2007 - 09:56 | Informe spam
Ok muchas gracias lo voy a revisar y testar en mi ejemplo :)

NS

"Gustavo Larriera (MVP)"
wrote in message news:
Entiendo que querés ejecutar dinámicamente una query y obtener el valor
resultante que la query calcula.

Para eso usa sp_executesql en vez de EXEC. Proporciona los parámetros de
tipo OUTPUT apropiados para obtener el valor resultado. Esto es un ejemplo
tomado del artículo que menciono más abajo:

DECLARE @sql nvarchar(4000), -- nvarchar(MAX) en SQL 2005.
@col sysname,
@min varchar(20)
SELECT @col = N'au_fname'
SELECT @sql = N'SELECT @min = convert(varchar(20), MIN(' + @col +
N')) FROM authors'
EXEC sp_executesql @sql, N'@min varchar(20) OUTPUT', @min OUTPUT
SELECT @min

Podés aprender los detalles en este artículo de Erland Sommarskog:

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Nuno Santos" wrote:

Gracias por responder,
Lo que quiero saber es la cantidad de registros que me dá la query.
La
query que está guardad en la tabla es siempre del tipo :
SELECT COUNT(*) as NumRegistros From miTabla WHERE

NS

"Gustavo Larriera (MVP)"
wrote in message
news:
> Cuál es el problema exacto ?
>
> Para saber la cantidad de filas afectadas, usa @@ROWCOUNT
>
>
> Gustavo Larriera, Microsoft MVP
> https://mvp.support.microsoft.com/p...o.Larriera
> Este mensaje se proporciona tal como es, sin garantías de ninguna
> clase.
>
>
>
> "Nuno Santos" wrote:
>
>> Holá grupo, estoy con un problemilla, como puedo hacer para ejecutar
>> una
>> série de querys que estan guardadas en una tabla de mi BD, esto es la
>> SP
>> que
>> estoy tentando hacer:
>>
>> CREATE PROCEDURE GetListaValidacoes
>> @tabela as varchar(50),
>> )AS
>>
>>
>> DECLARE @query AS varchar(4000)
>> SET @query =''
>>
>> DECLARE @numreg AS int
>> SET @numreg=0
>>
>> BEGIN TRAN
>>
>> DECLARE DEST_cursor1 CURSOR FOR
>> SELECT Query FROM miTabla WHERE tabela=@tabela
>>
>> OPEN DEST_cursor1
>> if (@@error<>0) goto ERROR
>>
>> FETCH NEXT FROM DEST_cursor1 INTO @query
>>
>> WHILE (@@FETCH_STATUS <> -1)
>> BEGIN
>> EXEC (@query)
>> IF @numreg=0 /* como tener este valor preenchido en la ejecución de
>> la
>> query???? */
>> BEGIN
>> FETCH NEXT FROM DEST_cursor1 INTO @query
>> end
>> ELSE
>> begin
>> PRINT @numreg
>> BREAK
>> end
>> end
>>
>> ERROR:
>> IF Cursor_Status('local','DEST_cursor1') <> -1
>> BEGIN
>> CLOSE DEST_cursor1
>> DEALLOCATE DEST_cursor1
>> END
>> ROLLBACK
>> RETURN -1
>> GO
>>
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida