es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El comando SET QUOTED_IDENTIFIER ON dentro del procedimiento almacenado no está funcionando.

Estoy utilizando FOR XML PATH en mi procedimiento almacenado y por eso necesito que QUOTED_IDENTIFIER esté configurado como ON. Lo tengo como la primera declaración de mi procedimiento almacenado.

SET QUOTED_IDENTIFIER ON;

Esto funciona bien todas las veces, excepto cuando restauro mi base de datos por primera vez.

Justo después de restaurar la base de datos, revisé sp_helptext y el procedimiento almacenado parece estar bien.

sp_helptext

Sin embargo, cuando examino mi procedimiento almacenado desde el Explorador de Objetos y hago clic en “Modificar”, muestra esto:

Modificar

Cuando intenté ejecutar el procedimiento almacenado usando EXEC se produce un error:

SELECT failed because the following SET options have incorrect settings: ‘QUOTED_IDENTIFIER’. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.

Descripción de la imagen

¿Alguien puede explicarme por qué SQL Server está agregando SET QUOTED_IDENTIFIER OFF por sí solo? ¿Cómo puedo deshacerme de eso? ¿O cómo podemos sobrescribirlo desde el interior del procedimiento almacenado?

Si elimino SET QUOTED_IDENTIFIER OFF del principio, lo vuelvo a ejecutar y funcionará correctamente.

Mi problema es que tenemos un proceso automatizado que ejecuta migraciones/crea la base de datos en cada compilación, por lo que no puedo eliminarlo manualmente todas las veces.
Tampoco puedo configurarlo en el nivel de la base de datos.

Verifiqué la configuración de la base de datos y está configurada como false, pero eso no debería marcar ninguna diferencia, ¿verdad? Ya que lo tengo específicamente configurado como ON dentro de mi procedimiento almacenado.

Descripción de la imagen

Gracias de antemano.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que SQL Server está cambiando la opción SET QUOTED_IDENTIFIER a OFF cuando intentas modificar el procedimiento almacenado desde el Explorador de objetos. Este comportamiento no es infrecuente y puede ocurrir por diversas razones. Una posible razón es que el Explorador de objetos está generando un script que incluye la instrucción SET QUOTED_IDENTIFIER OFF, que luego se ejecuta al modificar el procedimiento almacenado.

    Para solucionar este problema, puedes agregar la instrucción SET QUOTED_IDENTIFIER ON al principio del propio procedimiento almacenado, en lugar de depender de la opción a nivel de base de datos o de la configuración del Explorador de objetos. De esta manera, incluso si la opción cambia durante el proceso de modificación, será sobrescrita por tu declaración.

    Si no deseas modificar el procedimiento almacenado en sí, puedes intentar cambiar las opciones del Explorador de objetos para generar scripts con la opción QUOTED_IDENTIFIER establecida en ON. Para hacerlo, haz clic derecho en la base de datos en el Explorador de objetos, selecciona Propiedades y luego haz clic en la pestaña de Scripting. En la sección General, establece el valor de la opción QUOTED_IDENTIFIER en True. Esto garantizará que el script generado siempre incluya la declaración SET QUOTED_IDENTIFIER ON.

    Alternativamente, si tienes acceso al script que ejecuta las migraciones/crea la base de datos, puedes agregar la instrucción SET QUOTED_IDENTIFIER ON al principio del script para asegurarte de que siempre esté configurada correctamente. Esto requeriría modificar el script manualmente, pero garantizaría que la opción se establezca correctamente cada vez que se ejecute el script.

    En general, la mejor solución depende de tus requisitos y limitaciones específicas. Si no es posible modificar el procedimiento almacenado, puedes probar los enfoques mencionados anteriormente o buscar soluciones alternativas que no dependan de FOR XML PATH.

Comments are closed.