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.
Sin embargo, cuando examino mi procedimiento almacenado desde el Explorador de Objetos y hago clic en “Modificar”, muestra esto:
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.
¿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.
Gracias de antemano.
davy.ai
Parece que SQL Server está cambiando la opción
SET QUOTED_IDENTIFIER
aOFF
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ónSET 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 enON
. 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ónQUOTED_IDENTIFIER
enTrue
. Esto garantizará que el script generado siempre incluya la declaraciónSET 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
.