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?