Estamos actualizando nuestro entorno de prueba con un nuevo servidor y una versión actualizada de Microsoft SQL Server y hemos tenido un problema.
En el nuevo servidor, nuestro antiguo código obtendrá "no se permite la operación cuando el objeto está cerrado" al ejecutar algunos procedimientos almacenados. Este mensaje nunca apareció en el antiguo servidor. Cuando lo rastreamos, el problema se puede resolver agregando SET NOCOUNT ON;
al procedimiento almacenado.
Observé los valores predeterminados en la base de datos y no vi configuraciones diferentes (SQL Server 2008 vs SQL Server 2014) relacionadas con los valores predeterminados.
¿Qué configuración debería tener en cuenta para resolver esto globalmente sin necesidad de agregar SET NOCOUNT ON
a mil procesos almacenados?
fuente
SET NOCOUNT ON;
, siempre.SET NOCOUNT ON;
al comienzo del procedimiento almacenado (despuésBEGIN
). El número de procedimientos almacenados realmente no debería ser un problema.BEGIN
, es bueno, pero no es obligatorio.Respuestas:
La configuración de SQL Server tiene una opción llamada, apropiadamente,
user options
, que se puede configurar usando elsp_configure
procedimiento almacenado del sistema. Escribí una publicación de blog sobre SQL Server Science que muestra cómo inspeccionar y configurar las opciones de usuario.En resumen, puede obtener el "valor de configuración" del servidor anterior, usando esto:
Luego, configure el nuevo servidor para usar las mismas opciones a través de esto:
(reemplace el <valor de configuración> con el valor del servidor anterior).
fuente
SET NOCOUNT ON
resuelve el problema, establecer las opciones de usuario en 512 lo solucionará.