Événements
31 mars, 23 h - 2 avr., 23 h
L’événement de la communauté Microsoft Fabric, Power BI, SQL et AI ultime. 31 mars au 2 avril 2025.
Inscrivez-vous aujourd’huiCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance
Vous pouvez définir des index sur des colonnes calculées si les règles suivantes sont respectées :
Notes
SET QUOTED_IDENTIFIER
doit avoir la valeur ON
lors de la création ou de la modification d’index dans des colonnes calculées ou des vues indexées. Pour plus d'informations, consultez SET QUOTED_IDENTIFIER (Transact-SQL).
Toutes les références de fonctions dans la colonne calculée doivent avoir le même propriétaire que la table.
Une expression est déterministe lorsqu'elle retourne toujours le même résultat pour un ensemble donné d'entrées. La propriété IsDeterministic
de la fonction COLUMNPROPERTY indique si un paramètre computed_column_expression est déterministe ou non.
Le paramètre computed_column_expression doit être déterministe. Une expression_de_colonne_calculée est déterministe quand toutes les conditions suivantes sont vraies :
Toutes les fonctions référencées par l'expression sont déterministes et précises, notamment les fonctions définies par l'utilisateur et les fonctions intégrées. Pour plus d’informations, consultez Fonctions déterministes et non déterministes. Les fonctions peuvent être imprécises si la colonne calculée est de type PERSISTED
. Pour plus d’informations, consultez Créer des index sur des colonnes calculées persistantes, plus loin dans cet article.
Toutes les colonnes auxquelles l'expression fait référence proviennent de la table contenant la colonne calculée.
Aucune référence de colonne n'extrait de données provenant de plusieurs lignes. Par exemple, certaines fonctions d’agrégation, telles que SUM
ou AVG
, dépendent de données provenant de plusieurs lignes et rendraient un paramètre computed_column_expression non déterministe.
Le paramètre computed_column_expression n’a pas d’accès aux données système ni utilisateur.
Une colonne calculée qui contient une expression CLR (Common Language Runtime) doit être déterministe et marquée comme PERSISTED
avant de pouvoir être indexée. Les expressions de type CLR définies par l'utilisateur sont permises dans les définitions de colonnes calculées. Les colonnes calculées de type CLR définies par l'utilisateur peuvent être indexées à condition que le type soit comparable. Pour plus d’informations, consultez Types CLR définis par l’utilisateur.
Lorsque vous faites référence aux littéraux de chaîne de type de données de date dans des colonnes calculées indexées dans SQL Server, il est recommandé de convertir explicitement le littéral dans le type de date souhaité à l’aide d’un style de format de date déterministe. Pour obtenir la liste des styles de formats de date déterministes, consultez CAST et CONVERT.
Pour plus d’informations, consultez Conversion non déterministe de chaînes de date littérale en valeurs DATE.
La conversion implicite de données de caractères non Unicode entre les classements est considérée comme non déterministe, à moins que le niveau de compatibilité soit égal ou inférieur à 80
.
Lorsque le niveau de compatibilité de la base de données est égal à 90
, vous ne pouvez pas créer d’index sur les colonnes calculées qui contiennent ces expressions. Cependant, les colonnes calculées existantes qui contiennent ces expressions provenant d'une base de données mise à niveau sont gérables. Si vous utilisez des colonnes calculées indexées contenant une chaîne implicite pour les conversions de dates, afin d’éviter tout endommagement éventuel d’index, assurez-vous que les paramètres LANGUAGE
et DATEFORMAT
sont cohérents dans vos bases de données et applications.
Le niveau de compatibilité 90
correspond à SQL Server 2005 (9.x).
Le paramètre computed_column_expression doit être précis. Un paramètre computed_column_expression est précis quand une ou plusieurs des conditions suivantes sont remplies :
Il ne s’agit pas d’une expression des types de données float ou real.
Il n’utilise pas un type de données float ou real dans sa définition. Par exemple, dans l’instruction suivante, la colonne y
est de type int et déterministe, mais pas précise.
CREATE TABLE t2 (a int, b int, c int, x float,
y AS CASE x
WHEN 0 THEN a
WHEN 1 THEN b
ELSE c
END);
Notes
Toute expression float ou real est considérée comme non précise et ne peut pas être une clé d’index. Autrement dit, une expression float ou real peut être utilisée dans une vue indexée mais pas en tant que clé. Ce point s'applique également aux colonnes calculées. Toute fonction, expression ou fonction définie par l’utilisateur est considérée imprécise si elle contient des expressions float ou real , même logiques (comparaisons).
La propriété IsPrecise
de la fonction COLUMNPROPERTY
indique si un paramètre computed_column_expression est précis ou non.
L’option de niveau de connexion ANSI_NULLS
doit être activée (ON
) lors de l’exécution de l’instruction CREATE TABLE
ou ALTER TABLE
qui définit la colonne calculée. La fonction OBJECTPROPERTY indique si l’option est activée par le biais de la propriété IsAnsiNullsOn
.
La connexion sur laquelle l’index est créé, ainsi que toutes les connexions tentant d’exécuter des instructions INSERT
, UPDATE
ou DELETE
appelées à modifier des valeurs de l’index, doivent comporter six groupes d’options SET
sur ON
et un groupe d’options sur OFF
. L’optimiseur ignore un index sur une colonne calculée dès qu’une instruction SELECT
est exécutée par une connexion qui ne respecte pas ces paramètres d’options.
L’option NUMERIC_ROUNDABORT
doit être définie sur OFF
et les options suivantes doivent être définies sur ON
:
ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS
ARITHABORT
CONCAT_NULL_YIELDS_NULL
QUOTED_IDENTIFIER
Notes
L’affectation de la valeur ANSI_WARNINGS
à ON
affecte de manière implicite la valeur ARITHABORT
à ON
, lorsque le niveau de compatibilité de la base de données est d’au moins 90
.
Parfois, vous pouvez créer une colonne calculée qui est définie par une expression déterministe, mais non précise. Vous pouvez le faire quand la colonne est marquée comme PERSISTED
dans l’instruction CREATE TABLE
ou ALTER TABLE
.
Cela signifie que le Moteur de base de données stocke les valeurs calculées dans la table et qu'il les met à jour lorsque les autres colonnes dont dépendent les colonnes calculées sont mises à jour. Le Moteur de base de données utilise ces valeurs persistantes pour créer un index sur la colonne et lorsqu'une requête fait référence à l'index.
Cette option vous permet de créer un index sur une colonne calculée lorsque le moteur de base de données ne peut pas prouver avec certitude qu’une fonction qui retourne des expressions de colonnes calculées, en particulier une fonction CLR créée dans .NET Framework, est à la fois déterministe et précise.
Notes
Vous ne pouvez pas créer un index filtré sur une colonne calculée.
Événements
31 mars, 23 h - 2 avr., 23 h
L’événement de la communauté Microsoft Fabric, Power BI, SQL et AI ultime. 31 mars au 2 avril 2025.
Inscrivez-vous aujourd’huiEntrainement
Module
Concevoir un modèle de données performant dans Azure SQL Database avec Azure Data Studio - Training
Découvrez comment créer un modèle de données, des tables, des index, des contraintes et utiliser des types de données avec Azure Data Studio.