Cette sous-section décrit de nouveaux comportements introduits par le niveau de compatibilité 90. Pour plus d'informations sur les différences de comportement qui affectent le niveau de compatibilité 80 et les niveaux de compatibilité inférieurs, consultez la section « Mots clés réservés » plus loin dans cette section.
Avec le niveau de compatibilité 90, les changements de comportement suivants se produisent.
|
Paramètre de niveau de compatibilité égal ou inférieur à 80
|
Paramètre de niveau de compatibilité égal à 90
|
Possibilité d'impact
|
|---|
|
Pour les indicateurs de verrouillage dans la clause FROM, le mot clé WITH est toujours facultatif.
|
À quelques exceptions près, les indicateurs de table sont pris en charge dans la clause FROM uniquement lorsque les indicateurs sont spécifiés à l'aide du mot clé WITH. Pour plus d'informations, consultez FROM (Transact-SQL).
|
Élevée
|
|
Les opérateurs *= et =* pour la jointure externe sont pris en charge avec un message d'avertissement.
|
Ces opérateurs ne sont pas pris en charge ; le mot clé OUTER JOIN doit être utilisé.
|
Élevée
|
|
Lors de la liaison des références de colonnes de la liste ORDER BY avec les colonnes définies dans la liste SELECT, les ambiguïtés de colonnes sont ignorées et les préfixes de colonnes parfois ignorés. Cette situation risque de retourner le jeu de résultats dans un ordre inattendu.
Par exemple, une clause ORDER BY composée d'une colonne unique en deux parties (<table_alias>.<column>) qui est utilisée comme référence à une colonne dans une liste SELECT est acceptée, mais l'alias de table est ignoré. Considérez la requête suivante.
SELECT c1 = -c1 FROM t_table AS x ORDER BY x.c1
Lorsqu'elle est exécutée, le préfixe de colonne est ignoré dans ORDER BY. L'opération de tri ne se produit pas sur la colonne source spécifiée (x.c1) comme prévu, mais sur la colonne c1 dérivée définie dans la requête. Le plan d'exécution de cette requête indique que les valeurs de la colonne dérivée sont calculées, puis que les valeurs calculées sont triées.
|
Des erreurs sont signalées concernant les ambiguïtés de colonnes. Les préfixes de colonne spécifiés, le cas échéant, dans ORDER BY, ne sont pas ignorés lors de la liaison à la colonne définie dans la liste SELECT.
Considérez la requête suivante.
SELECT c1 = -c1 FROM t_table AS x ORDER BY x.c1
Lorsqu'elle est exécutée, le préfixe de colonne dans la clause ORDER BY est ignoré. L'opération de tri se produit sur la colonne source spécifiée (x.c1) comme prévu. Le plan d'exécution de cette requête indique que l'opérateur de tri classe les lignes retournées à partir de t_table, puis que les valeurs de la colonne dérivée c1 définie dans la liste SELECT sont calculées.
|
Moyenne
|
|
Dans une instruction INSERT SELECT à partir d'une UNION de différents types de données, chaque branche UNION est directement convertie selon le type de colonne cible de l'instruction INSERT. Même si l'union utilisée par elle-même risque d'échouer en raison de conversions de types incompatibles, l'instruction INSERT SELECT permet à l'UNION de réussir car la branche vers le type de résultat de l'UNION n'est jamais convertie.
|
Dans SQL Server 2005, le type de résultat d'UNION dérive indépendamment d'INSERT SELECT. Chaque branche d'UNION est convertie selon le type de résultat d'UNION, puis convertie d'après le type de la colonne cible d'INSERT. S'il existe des types incompatibles dans l'UNION, la première conversion risque de générer une erreur. Pour une exécution au niveau de compatibilité 90, vous devez résoudre toutes les unions de type incompatible utilisées dans INSERT SELECT.
|
Moyenne
|
|
Les opérations d'insertion et de mise à jour via une vue ne sont pas correctement prises en charge pour les vues qui spécifient la clause WITH CHECK OPTION lorsque la vue ou une vue référencée utilise la clause TOP.
|
Les opérations d'insertion et de mise à jour via une vue ne sont pas prises en charge pour les vues qui utilisent WITH CHECK OPTION lorsque la vue ou une vue référencée utilise la clause TOP.
|
Moyenne
|
|
L'UNION d'une colonne de longueur variable avec une colonne de longueur fixe produit une colonne de longueur fixe.
|
L'UNION d'une colonne de longueur variable avec une colonne de longueur fixe produit une colonne de longueur variable.
|
Moyenne
|
|
SET XACT_ABORT OFF est autorisé au sein d'un déclencheur.
|
SET XACT_ABORT OFF n'est pas autorisé au sein d'un déclencheur.
|
Moyenne
|
|
La clause FOR BROWSE est autorisée (et ignorée) dans les vues.
|
La clause FOR BROWSE n'est pas autorisée dans les vues.
|
Moyenne
|
|
Les erreurs de domaine ne sont pas contrôlées par ANSI_WARNINGS. Les paramètres ARITHABORT sont respectés, si ANSI_WARNINGS a la valeur OFF et que ARITHABORT ne fait l'objet d'aucune modification.
|
Les erreurs de domaine sont aussi contrôlées par ANSI_WARNINGS et constituent des erreurs de gravité 16. Si ANSI_WARNINGS ou ARITHABORT ont la valeur ON, une erreur est générée au lieu de retourner une valeur NULL. Cette modification risque de rompre les scripts utilisateur qui dépendent d'ARITHABORT avec la valeur OFF.
|
Moyenne
|
|
Si une requête de relais et une source de données distante [OpenRowset ou OpenQuery] produisent des colonnes avec des doublons de nom, les noms de colonne dupliqués sont ignorés, sauf si les colonnes sont explicitement nommées dans la requête.
|
Si une requête de relais et une source de données distante [OpenRowset ou OpenQuery] produisent une colonne avec des doublons de nom de colonne, une erreur est générée.
|
Faible
|
|
Les constantes de chaîne de caractères et les constantes varbinary d'une taille supérieure à 8000 sont traitées en tant que type text, ntext ou image.
|
Les constantes de chaîne de caractères et les constantes varbinary d'une taille supérieure à 8000 sont traitées en tant que type varchar(max) (ou nvarchar(max) et varbinary(max), respectivement). Cela peut modifier le type de données de la table créée à l'aide de SELECT … INTO si la liste SELECT contient de telles expressions.
|
Faible
|
|
Les comparaisons entre types numériques (smallint, tinyint, int, bigint, numeric, decimal, smallmoney, money) s'effectuent en convertissant les éléments de comparaison avec une précédence inférieure dans la hiérarchie de type par rapport au type dont la précédence est plus élevée.
|
Les valeurs de type numérique sont comparées sans conversion. Les performances s'en trouvent optimisées. Cela risque toutefois d'entraîner certaines modifications dans le comportement, notamment dans les cas où la conversion aurait entraîné des exceptions de dépassement.
|
Faible
|
|
Les fonctions de métadonnées intégrées qui prennent des arguments de chaîne tronquent leur entrée si celle-ci dépasse 4000 caractères.
|
Des fonctions de métadonnées intégrées génèrent une erreur si la troncation entraîne une perte de caractères sans espace.
|
Faible
|
|
Le jeu de caractères interdits dans un identificateur sans guillemet demeure inchangé.
|
L'analyseur Transact-SQL prend en charge la norme Unicode 3.2, qui modifie la classification des caractères pour certains caractères internationaux qui sont interdits dans des identificateurs non délimités.
|
Faible
|
|
SET ANSI_WARNINGS ON ne remplace pas le paramètre de SET ARITHABORT OFF en cas d'erreurs de domaine à virgule flottante [à savoir des arguments négatifs pour la fonction log()]. Si ANSI_WARNINGS a la valeur ON mais que ARITHABORT a la valeur OFF, les erreurs de domaine à virgule flottante n'entraînent pas l'achèvement de la requête.
|
SET ANSI_WARNINGS ON remplace entièrement le paramètre ARITHABORT OFF. Les erreurs de domaine à virgule flottante dans ce cas entraînent l'achèvement de la requête.
|
Faible
|
|
Les constantes de type non entier sont autorisées (et ignorées) dans la clause ORDER BY.
|
Les constantes de type non entier ne sont pas autorisées dans la clause ORDER BY.
|
Faible
|
|
L'instruction SET vide (sans affectation de l'option SET) est autorisée.
|
La clause SET vide n'est pas autorisée.
|
Faible
|
|
L'attribut IDENTITY ne dérive pas correctement des colonnes produites par une table dérivée.
|
L'attribut IDENTITY dérive correctement des colonnes produites par des tables dérivées.
|
Faible
|
|
La propriété de possibilité de valeur NULL d'opérateurs arithmétiques pour le type de données à virgule flottante accepte toujours les valeurs NULL.
|
La propriété de possibilité de valeur NULL d'opérateurs arithmétiques pour le type de données à virgule flottante est modifiée de manière à ne pas accepter de valeurs NULL dans le cas où les entrées ne pourraient pas accepter de valeurs NULL et où ANSI_WARNINGS aurait la valeur ON.
|
Faible
|
|
Dans l'instruction INSERT SELECT avec UNION, les types produits par les jeux de résultats individuels sont tous convertis selon le type de résultat de destination.
|
Dans l'instruction INSERT SELECT avec UNION, le type dominant des différentes branches est déterminé et les résultats convertis selon ce type avant d'être convertis d'après le type de la table de destination.
|
Faible
|
|
Dans l'instruction SELECT FOR XML, hex(27) (le caractère ') et hex(22) (le caractère ") sont toujours décomposés en entités, y compris lorsque cela ne s'avère pas nécessaire.
|
FOR XML décompose hex(27) et hex(22) en entités uniquement lorsque cela s'avère nécessaire. Ils ne sont pas décomposés en entités dans les situations suivantes :
-
Dans le contenu d'attribut, hex(27) (le caractère ') n'est pas décomposé en entités si les valeurs d'attribut sont délimitées par ", tandis que hex(22) (le caractère ") n'est pas décomposé en entités si les valeurs d'attribut sont délimitées par '.
-
Dans le contenu d'élément, hex(27) et hex(22) ne sont jamais décomposés en entités.
|
Faible
|
|
Dans FOR XML, la valeur de l'horodateur est mappée à un entier.
|
Dans FOR XML, la valeur de l'horodateur est mappée à une valeur binaire.
Pour plus d'informations, consultez Prise en charge de FOR XML pour le type de données timestamp.
|
Élevée (si une colonne timestamp est utilisée) ; sinon, faible
|
|
Dans FOR XML et OPENXML, les caractères Unicode à plage élevée (3 octets) dans les noms sont représentés à l'aide de 8 positions.
Avec l'utilisation, par exemple, de 8 positions, FOR XML représente le point de code Unicode U+10000 sous la forme :
<a_x00010000_ c1="1" />
|
Dans FOR XML et OPENXML, les caractères Unicode à plage élevée (3 octets) dans les noms sont représentés à l'aide de 6 positions.
Avec l'utilisation, par exemple, de 6 positions, FOR XML représente le point de code Unicode U+10000 sous la forme :
<a_x010000_ c1="1" />
|
Faible
|
|
Dans FOR XML, des mappages de table dérivée en mode AUTO sont traités de manière transparente.
Par exemple :
USE AdventureWorks
CREATE TABLE Test(id int);
INSERT INTO Test VALUES(1);
INSERT INTO Test VALUES(2);
SELECT * FROM (SELECT a.id AS a,
b.id AS b FROM Test a
JOIN Test b ON a.id=b.id)
Test FOR XML AUTO;
Lorsque le niveau de compatibilité de AdventureWorks a la valeur 80, l'exemple ci-dessus produit :
<a a="1"><b b="1"/></a>
<a a="2"><b b="2"/></a>
|
Dans FOR XML, des mappages de table dérivée en mode AUTO sont traités de manière opaque.
Lorsque le niveau de compatibilité de AdventureWorks a la valeur 90, l'exemple précédent produit :
<Test a="1" b="1"/>
<Test a="2" b="2"/>
Pour plus d'informations sur les modifications en mode AUTO, consultez Améliorations du mode AUTO.
|
Élevée (si le mode FOR XML AUTO est appliqué à des vues) ; sinon, faible
|
|
La chaîne vers les conversions money prend en charge l'utilisation d'un caractère barre oblique inverse (\) en tant que symbole monétaire uniquement dans les langues japonaise et coréenne.
|
Le caractère barre oblique inverse (\) est accepté dans toutes les chaînes vers des conversions money, dans toutes les langues. ISNUMERIC retourne True lorsque \ est utilisé en tant que symbole monétaire.
Pour les bases de données des versions de SQL Server antérieures à SQL Server 2005, ce nouveau comportement altère les index et colonnes calculées dépendant d'une valeur de retour ISNUMERIC qui contient le caractère \ et dont la langue n'est ni le japonais ni le coréen.
|
Faible
|
|
Le résultat d'un opérateur arithmétique accepte toujours les valeurs NULL, même si les opérandes n'acceptent pas les valeurs NULL et que ANSI_WARNINGS ou ARITHABORT a la valeur ON.
|
Lorsque ANSI_WARNINGS ou ARITHABORT a la valeur ON, le résultat d'un opérateur arithmétique à virgule flottante n'accepte pas les valeurs NULL si les deux opérandes n'acceptent pas les valeurs NULL.
Cette modification de possibilité de valeur NULL risque de provoquer un échec lorsque bcp est utilisé pour exporter en bloc des données qui utilisent le format binaire à partir d'une table SQL Server 2000 avec une colonne calculée qui utilise un opérateur arithmétique à virgule flottante et que bcp ou BULK INSERT est ensuite utilisé pour importer en bloc ces données dans une table SQL Server 2005 avec la même définition.
Remarque : |
Lorsque les deux options ont la valeur OFF, le moteur de base de données indique le résultat comme acceptant les valeurs NULL. Ce comportement est identique dans SQL Server 2000.
|
Faible
|
|
Pour les fonctions intégrées qui prennent nvarchar comme paramètre, si la valeur fournie est de type varchar, cette valeur est convertie en type nvarchar(4000). Dans SQL Server 2000, si une valeur plus importante est transmise, elle est discrètement tronquée.
|
Pour les fonctions intégrées qui prennent nvarchar comme paramètre, si la valeur fournie est de type varchar, cette valeur est toujours convertie en type nvarchar(4000). Cependant, si une valeur plus importante est transmise, SQL Server 2005 génère une erreur.
Pour une exécution au niveau de compatibilité 90, vous devez résoudre tout code personnalisé qui dépend du comportement de la troncation.
|
Faible
|
|
L'union d'une chaîne de longueur fixe (char, binary ou nchar) avec une chaîne de longueur variable (varchar, varbinary ou nvarchar) retourne un résultat de longueur fixe.
|
L'union d'une chaîne de longueur variable avec une chaîne de longueur fixe retourne une chaîne de longueur variable.
Pour une exécution avec un niveau de compatibilité 90, vous devez résoudre toutes les insertions (index, requêtes et colonnes calculées) qui dépendent du type résultant d'une union entre un type de taille variable et un type de taille fixe.
|
Faible
|
|
Les noms d'objets contenant le caractère 0xFFFF constituent des identificateurs valides.
|
Les noms d'objets contenant les caractères 0xFFFF sont des identificateurs non valides et sont inaccessibles.
Pour une exécution avec le niveau de compatibilité 90, vous devez renommer les objets qui contiennent ce caractère.
|
Faible
|
|
Dans SELECT ISNUMERIC('<string>'), les virgules présentes dans <string> ont toute leur importance.
Par exemple, la requête SELECT ISNUMERIC('121212,12') suivante retourne 0, ce qui signifie que la chaîne 121212,12 n'est pas numérique.
|
Dans SELECT ISNUMERIC('<string>'), les virgules présentes dans <string> sont ignorées.
Par exemple, la requête SELECT ISNUMERIC('121212,12') suivante retourne 1, ce qui signifie que la chaîne 121212,12 est numérique.
|
Faible
|
|
Un signe deux-points (:) à la suite d'un mot clé réservé dans une instruction Transact-SQL est ignoré.
|
Un signe deux-points (:) à la suite d'un mot clé réservé dans une instruction Transact-SQL provoque l'échec de l'instruction.
|
Faible
|
|
Dans une sous-requête, une clause GROUP BY qui référence une colonne de la requête externe réussit.
|
Dans une sous-requête, une clause GROUP BY qui référence une colonne de la requête externe retourne une erreur conformément au standard SQL.
|
Faible
|