Options SET affectant les résultats

La création de vues indexées et d'index sur des colonnes calculées implique le stockage des résultats dans la base de données à des fins de référence ultérieure. Ces résultats stockés ne sont valides que si toutes les connexions qui font référence aux vues indexées ou aux index des colonnes calculées peuvent générer le même jeu de résultats que la connexion ayant créé l'index. Pour vous assurer que les résultats stockés peuvent être dûment conservés et retourner des résultats cohérents, vous devez définir les options SET de la table suivante sur les valeurs spécifiées dans la colonne Valeur requise dans les conditions suivantes :

  • un index est créé sur une vue ou sur une colonne calculée ;

  • une colonne calculée est définie et la valeur PERSISTED est spécifiée ;

  • Une opération INSERT, UPDATE ou DELETE modifie des valeurs de données stockées dans la vue indexée ou la colonne calculée indexée. Ceci inclut des opérations telles que des requêtes BCP, DTS, de réplication et distribuées.

  • l'optimiseur de requête utilise l'index dans le plan d'exécution de la requête.

  • Dans le cas d'une vue indexée, les options ANSI_NULLS et QUOTED_IDENTIFIER doivent être activées (ON) lors de la création de la vue étant donné que ces deux paramètres sont stockés avec les métadonnées de la vue.

    Options SET

    Valeur requise

    Valeur du serveur par défaut

    Valeur OLE DB

    et ODBC par défaut

    Valeur de la bibliothèque

    DB-Library par défaut

    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

    *L'affectation de la valeur ON à ANSI_WARNINGS affecte de manière implicite la valeur ON à ARITHABORT, lorsque le niveau de compatibilité de la base de données est d'au moins 90. Si le niveau de compatibilité de la base de données est défini à 80 ou moins, la valeur ON doit être affectée de manière explicite à l'option ARITHABORT.

En cas de configuration incorrecte des options SET, il peut se produire une ou plusieurs erreurs :

  • Le Moteur de base de données génère une erreur et restaure toute instruction INSERT, UPDATE ou DELETE modifiant les valeurs de données stockées dans l'index.

  • l'optimiseur de requête n'utilise pas l'index dans le plan d'exécution d'une instruction Transact-SQL ;

  • il est impossible de créer une vue indexée ou une colonne calculée.

Paramètres d'option SET pour les connexions OLE DB et ODBC

La majorité des applications utilisent soit le fournisseur OLE DB pour SQL Server, soit le pilote ODBC de SQL Server pour se connecter à une instance de SQL Server, notamment pour l'exécution d'opérations dans SQL Server Management Studio, Integration Services et des opérations de réplication ou de copie en bloc. Les paramètres OLE DB et ODBC par défaut sont corrects pour les six options SET nécessaires pour la création de vues indexées ou de colonnes calculées. Pour connaître les valeurs OLE DB et ODBC par défaut, consultez le tableau ci-dessus. Ces paramètres appliquent les règles de la norme ISO et sont les paramètres recommandés pour SQL Server. Pour plus d'informations, consultez Configuration du réseau client.

Notes

Certains utilitaires SQL Server désactivent (OFF) un ou plusieurs paramètres ANSI pour assurer la compatibilité avec leurs versions antérieures.

Paramètres des options SET pour la bibliothèque DB-Library et Embedded SQL pour C

Par défaut, la bibliothèque DB-Library et Embedded SQL pour C ne définissent aucune option de session. Les systèmes qui utilisent ces interfaces API doivent programmer les applications pour qu'elles génèrent les instructions SET adéquates ou modifier en conséquence les paramètres par défaut de la base de données ou du serveur.

Priorité de définition des options

Les paramètres ON et OFF des options SET peuvent être définis à plusieurs niveaux. La valeur finale de chaque option de session est déterminée par l'opération dotée de la priorité la plus élevée et définissant cette option. Vous trouverez ci-dessus l'ordre de priorité des opérations de paramétrage de session, par ordre décroissant d'importance :

  • Toute application peut explicitement remplacer tout paramètre par défaut en exécutant une instruction SET après sa connexion à un serveur. L'instruction SET supplante tout paramètre antérieur et permet d'activer et de désactiver dynamiquement les options au fil de l'exécution de l'application. Les paramètres des options SET sont valides pour la session de connexion en cours.

  • Les applications OLE DB et ODBC peuvent spécifier les paramètres d'option en vigueur lors de la connexion par le biais de chaînes de connexion. Les paramètres des options SET sont valides pour la session de connexion en cours.

  • Vous pouvez spécifier les options SET d'une source de données ODBC de SQL Server à l'aide de l'application ODBC, accessible via le Panneau de configuration, ou de la fonction ODBC SQLConfigDataSource.

  • Valeurs par défaut d'une base de données. Vous pouvez spécifier ces valeurs à l'aide d'ALTER DATABASE ou de l'Explorateur d'objets dans SQL Server Management Studio.

  • Valeurs par défaut d'un serveur. Vous pouvez spécifier ces valeurs à l'aide de sp_configure ou de l'Explorateur d'objets dans SQL Server Management Studio afin de définir l'option de configuration de serveur nommée user options.

Si, par exemple, la valeur par défaut ODBC pour l'option ANSI_NULLS est activée (ON), vous pouvez la remplacer en désactivant cette option (OFF) dans une chaîne de connexion ODBC ou en utilisant les instructions SET après vous être connecté à la base de données.

Procédures stockées et déclencheurs

Les procédures stockées et les déclencheurs doivent être écrits de sorte à prendre en charge les six options SET requises pour la prise en charge des vues indexées et des colonnes calculées. L'optimiseur de requête n'utilise pas d'index sur une vue ou sur une colonne calculée si une instruction SELECT est exécutée par une procédure stockée ou un déclencheur en cas de paramétrage incorrect des options SET. L'instruction INSERT, UPDATE ou DELETE exécutée par une telle procédure stockée ou un tel déclencheur modifiant les valeurs de données stockées dans une vue indexée ou dans une colonne calculée génère une erreur.

Observations

L'instruction SET peut modifier dynamiquement les options de session. Par conséquent, il faut faire preuve de prudence lors de l'exécution d'une telle instruction dans une base de données possédant des vues indexées et des colonnes calculées indexées. Par exemple, une application peut établir une connexion dans laquelle les paramètres par défaut permettent les références à une vue indexée ou à une colonne calculée indexée. Toutefois, si la connexion appelle une procédure stockée ou un déclencheur ayant pour première instruction SET ANSI_WARNINGS OFF, cette dernière remplace les valeurs par défaut ou les paramètres précédents de la fonction ANSI_WARNINGS. Dans ce cas, l'optimiseur ignore toutes les vues indexées et les colonnes calculées indexées lors du traitement des instructions de la procédure stockée ou du déclencheur.

Trois autres options de session peuvent éventuellement affecter la mise en forme des jeux de résultats : DATEFIRST, DATEFORMAT et LANGUAGE. Toute fonction dont les résultats sont susceptibles d'être affectés par une modification de ces options est dite non déterministe et ne peut pas être utilisée dans des vues indexées ou dans des colonnes calculées indexées.