¿Es necesario" SET NOCOUNT OFF " en un procedimiento almacenado?


Tengo muchos procedimientos que tiene set nocount on.

¿ Es necesario apagarlo al final del procedimiento almacenado?

Ej:

create procedure DummyProc
as
begin
    set nocount on
    ...
    set nocount off
end
Author: Jerad Rose, 2011-11-21

3 answers

set nocount on deshabilitará el mensaje X rows affected. que devuelve SQL. Este mensaje se suprime, en algunos casos, debido a efectos no deseados con el cliente ejecutando el proc almacenado.

set nocount off deshará esta supresión. Sin embargo, set nocount on es una configuración de ámbito, y por defecto, se desactivará al salir del ámbito de todos modos.

Ahora, ¿es necesario set nocount off? No, ya que cualquier comando nuevo ejecutado estará en un ámbito diferente, y por defecto set nocount off está siempre en vigor. Pero como se indicó anteriormente en los comentarios, es considerada una buena práctica, solo para indicar explícitamente que esta configuración volverá a la normalidad cuando el proc termine de ejecutarse.

 35
Author: Jerad Rose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-21 19:44:42

Solo si no quieres ver

(1 row(s) affected) // or n rows....

La mayor parte del tiempo - cuando debug

Y se utiliza el comando imprimir - por lo que desea ver el texto puro de su propio... así que esa es una buena práctica.

Editar

No afecta el resultado de la consulta (encendido o apagado - no importa.)- si eso es lo que está pidiendo. ( gracias JNK).

 4
Author: Royi Namir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-21 19:24:10

Sé que este es un post bastante antiguo, pero fue el primer éxito en Google cuando busqué la respuesta. La respuesta anterior para probarlo fue una muy buena idea.

Probé esto y quería actualizar lo anterior con algunos detalles adicionales.

El ámbito que se crea con un CONJUNTO NOCOUNT ON fluye a cualquier procs que su procedimiento llame. Así que si su procedimiento establece NOCOUNT ON y luego llama a un sproc, ese sproc obtiene su configuración SET NOCOUNT. La configuración desaparece cuando usted salga de su sproc, pero la configuración fluye hacia abajo en sprocs llamados. Si ESTABLECE NOCOUNT dentro del sproc LLAMADO, el sproc externo tendrá el NOCOUNT establecido y el sproc interno no afectará al sproc externo.

Así que creo que realmente no necesita restablecerlo al final de su sproc porque su configuración nunca fluirá desde su sproc hacia arriba; sin embargo, si su sproc depende de la configuración, debe configurarlo antes de que lo necesite porque si se llama desde otro sproc, se podría tener una configuración diferente de la que asumes.

 3
Author: John Mitchell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-14 10:32:32