variable valor una salida saber resultado que procedimientos procedimiento permisos parametros para guardar fecha esta ejemplo ejecutar ejecutando devuelven declarar con como almacenados almacenado sql-server stored-procedures cursors

sql server - valor - ¿Cómo desactivo los resultados de la consulta cuando ejecuto un procedimiento almacenado desde un procedimiento almacenado?



procedimiento almacenado sql server ejemplo (6)

Cursores malos No reutilice el código de proceso almacenado si eso significa que tiene que hacer una función basada en conjunto con un cursor. Mejor para el rendimiento escribir el código de una manera establecida.

Creo que me preocupa que estés más preocupado por suprimir los mensajes que tú porque tienes un error en el cursor.

Dentro de un procedimiento almacenado, se llama a otro procedimiento almacenado dentro de un cursor. Para cada llamada, la ventana de resultados de SQL Management Studio muestra un resultado. El cursor gira más de 100 veces y en ese punto la ventana de resultados se da por vencida con un error. ¿Hay alguna manera de evitar que el procedimiento almacenado dentro del cursor arroje resultados?

WHILE @@FETCH_STATUS = 0 BEGIN EXEC @RC = dbo.NoisyProc SELECT @RValue2 = 1 WHERE @@ROWCOUNT = 0 FETCH NEXT FROM RCursor INTO @RValue1, @RValue2 END

¡Gracias!


Lugar:

SET ROWCOUNT OFF /* the internal SP */ SET ROWCOUNT ON

envuelva eso alrededor del SP interno, o incluso podría hacerlo alrededor de la instrucción SELECT de la consulta de origen, lo que evitará que aparezcan los resultados.


Probablemente el error proviene de demasiados conjuntos de registros devueltos, en lugar de un error lógico en su SP o el cursor mismo. Mira este ejemplo:

DECLARE @I INT SET @I=0 WHILE @I<200 BEGIN SELECT * FROM INFORMATION_SCHEMA.TABLES SET @I = @I + 1 END

Se ejecutará varias veces (un poco más de 100) y luego fallará con:

La consulta ha excedido la cantidad máxima de conjuntos de resultados que se pueden mostrar en la cuadrícula de resultados. Solo los primeros 100 conjuntos de resultados se muestran en la cuadrícula.

El SSMS tiene un límite en la cantidad de conjuntos de registros que puede mostrarte. Una forma rápida de puentear esa limitación es presionar Ctrl + T (o Consulta de menú-> Resultados a-> Resultados a texto) para forzar que la salida esté en texto plano, en lugar de conjuntos de registros en forma de tabla. Llegará a otro límite con el tiempo (la ventana de resultados no puede manejar una cantidad infinita de salida de texto) pero será mucho mayor.

En el ejemplo anterior, no aparece el error después de cambiar los resultados para que estén en forma de texto.


Puede descartar los resultados en SQL Server Mgmt Studio 2005 siguiendo los pasos a continuación:

• Haz clic con el botón derecho en la ventana de consulta
• Elija "Opciones de consulta"
• Haga clic en el "nodo" "Resultados" en la vista de árbol del panel izquierdo
• Marque "Descartar resultados después de la ejecución" en el centro / derecha del formulario

Puedes probarlo

DECLARE @i int SET @i = 1 WHILE (@i <= 100) BEGIN SELECT @i as Iteration SET @i = @i + 1 END


Sé que esta pregunta es antigua, pero podría configurar SET NOCOUNT ON para evitar que el SP emita un mensaje por cada fila.


podría insertar los resultados en una tabla temporal, luego soltar la tabla temporal

create table #tmp (columns) while ... insert into #tmp exec @RC=dbo.NoisyProc ... end drop table #tmp

de lo contrario, ¿puedes modificar el proceso al que se llama para que acepte una marca que le indique que no genere un conjunto de resultados?