Opciones SET que afectan a los resultados

Las vistas indizadas y los índices de columnas calculadas almacenan los resultados en la base de datos para su consulta posterior. Los resultados almacenados solo son válidos si todas las conexiones que hacen referencia a la vista indizada o a la columna calculada indizada pueden generar el mismo conjunto de resultados que la conexión que creó el índice. Para asegurarse de que los resultados almacenados se pueden mantener correctamente y devuelven resultados coherentes, las opciones SET de la tabla siguiente se deben establecer en los valores mostrados en la columna Valor obligatorio siempre que se cumplan estas condiciones:

  • Se crea un índice en una vista o columna calculada.

  • Se define una columna calculada y se especifica PERSISTED.

  • Una operación INSERT, UPDATE o DELETE modifica los valores de los datos almacenados en la vista indizada o la columna calculada indizada. Incluye operaciones como BCP, DTS, replicación y consultas distribuidas.

  • El optimizador de consultas utiliza el índice del plan de ejecución de consultas.

  • En las vistas indizadas, las opciones ANSI_NULLS y QUOTED_IDENTIFIER deben establecerse en ON cuando se crea la vista, ya que estas dos opciones de configuración se almacenan con los metadatos de la vista.

    Opciones SET

    Valor obligatorio

    Valor del servidor predeterminado

    Valor predeterminado

    de OLE DB y ODBC

    Valor predeterminado

    Valor de DB-Library

    ANSI_NULLS

    ON

    OFF

    ON

    OFF

    ANSI_PADDING

    ON

    ON

    ON

    OFF

    ANSI_WARNINGS*

    ON

    OFF

    ON

    OFF

    ARITHABORT

    ON

    ON

    OFF

    OFF

    CONCAT_NULL_YIELDS_NULL

    ON

    OFF

    ON

    OFF

    NUMERIC_ROUNDABORT

    OFF

    OFF

    OFF

    OFF

    QUOTED_IDENTIFIER

    ON

    OFF

    ON

    OFF

    *Al configurar ANSI_WARNINGS en ON, se establece de forma implícita ARITHABORT en ON cuando el nivel de compatibilidad de la base de datos está configurado en 90 o superior. Si el nivel de compatibilidad de la base de datos está establecido en 80 o en un nivel inferior, debe configurarse explícitamente la opción ARITHABORT en ON.

Cuando las opciones SET se establecen incorrectamente, puede producirse una o varias de las siguientes situaciones:

  • Motor de base de datos genera un error y revierte cualquier instrucción INSERT, UPDATE o DELETE que cambia los valores de los datos almacenados en el índice.

  • El optimizador de consultas no tiene en cuenta el índice en el plan de ejecución de ninguna instrucción Transact-SQL.

  • No se puede crear la vista indizada o la columna calculada.

Configuración de las opciones SET para OLE DB y conexiones ODBC

La mayoría de las aplicaciones utilizan el proveedor OLE DB para SQL Server o el controlador ODBC de SQL Server para conectarse a una instancia de SQL Server incluidas las operaciones de SQL Server Management Studio, Integration Services, replicación y copia masiva. Las configuraciones predeterminadas de OLE DB y ODBC son correctas para las seis opciones SET que se necesitan para índices de vistas o columnas calculadas. Para obtener los valores predeterminados de OLE DB y ODBC, vea la tabla anterior. Estas configuraciones exigen las reglas del estándar ISO y son las configuraciones recomendadas para SQL Server. Para obtener más información, vea Configuración de red de cliente.

Nota

Algunas de las utilidades de SQL Server establecen en OFF una o varias de las configuraciones ANSI para mantener la compatibilidad con las versiones anteriores de las utilidades.

Configuración de las opciones SET para DB-Library y SQL incrustado para conexiones C

DB-Library y SQL incrustado para aplicaciones escritas en C no establecen ninguna opción de sesión de manera predeterminada. Los sistemas que utilizan estas API deben codificar las aplicaciones para que emitan instrucciones SET adecuadas o cambiar los valores predeterminados de la base de datos o el servidor a la configuración correcta.

Prioridad para configurar las opciones

Los valores ON u OFF para las opciones SET se pueden especificar en varios niveles. El valor final de cada opción de sesión se determina mediante la operación de mayor prioridad que establece la opción. A continuación se enumera la prioridad de las operaciones de configuración de la sesión (con el de mayor prioridad al principio de la lista):

  • Cualquier aplicación puede anular de manera explícita una configuración predeterminada mediante la ejecución de una instrucción SET después de conectarse al servidor. La instrucción SET anula todas las configuraciones previas y puede utilizarse para activar y desactivar opciones dinámicamente mientras se ejecuta la aplicación. La configuración de las opciones sólo es aplicable a la sesión de conexión actual.

  • Las aplicaciones OLE DB y ODBC pueden especificar la configuración de las opciones que tiene efecto en el momento de la conexión especificando dicha configuración en las cadenas de conexión. La configuración de las opciones sólo es aplicable a la sesión de conexión actual.

  • Las opciones SET se especifican para un origen de datos ODBC de SQL Server mediante el uso de la aplicación ODBC en el Panel de control o la función SQLConfigDataSource de ODBC.

  • Configuración predeterminada para una base de datos. Puede especificar estos valores utilizando ALTER DATABASE o el Explorador de objetos en SQL Server Management Studio.

  • Configuración predeterminada para un servidor. Puede especificar estos valores mediante el uso de sp_configure o del Explorador de objetos en SQL Server Management Studio para establecer la opción de configuración del servidor denominada user options.

Por ejemplo, el valor predeterminado de ODBC para ANSI_NULLS es ON; sin embargo, se puede reemplazar este valor al establecer dicha opción en OFF en una cadena de conexión ODBC o mediante el uso de instrucciones SET después de conectarse a la base de datos.

Procedimientos almacenados y desencadenadores

Se deben escribir procedimientos almacenados y desencadenadores para trabajar con las seis opciones SET que se necesitan para permitir índices en vistas y columnas calculadas. El optimizador de consultas no utiliza un índice en una vista o columna calculada en instrucciones SELECT que se ejecuten mediante un procedimiento almacenado o un desencadenador cuando las opciones SET se establecen de forma incorrecta. Una instrucción INSERT, UPDATE o DELETE en el procedimiento almacenado o el desencadenador que modifica los valores de datos almacenados en la vista indizada o la columna calculada genera un error.

Consideraciones

La instrucción SET puede cambiar las opciones de sesión dinámicamente, por lo que debe tener cuidado al emitir instrucciones SET en una base de datos con índices de vistas y columnas calculadas indizadas. Por ejemplo, una aplicación puede establecer una conexión en la que la configuración predeterminada permita hacer referencia a una vista indizada o una columna calculada indizada; sin embargo, si la conexión llama a un procedimiento almacenado o un desencadenador con una primera instrucción de SET ANSI_WARNINGS OFF, esa instrucción anula la configuración o valores predeterminados anteriores de ANSI_WARNINGS. En tal caso, el optimizador omite todas las vistas indizadas o columnas calculadas indizadas cuando procesa una instrucción en el procedimiento almacenado o desencadenador.

Otras tres opciones de sesión pueden afectar al formato de los conjuntos de resultados: DATEFIRST, DATEFORMAT y LANGUAGE. Las funciones cuyos resultados pudieran verse afectados por cambios en estas opciones se clasifican como no deterministas y no pueden utilizarse en vistas indizadas ni en columnas calculadas indizadas.