Changements de comportement des fonctionnalités du moteur de base de données de SQL Server 2014
Cette rubrique décrit les changements de comportement dans le moteur de base de données. Les changements de comportement affectent le fonctionnement ou l’interaction des fonctionnalités dans SQL Server 2014 par rapport aux versions antérieures de SQL Server.
Changements de comportement dans SQL Server 2014
Dans les versions antérieures de SQL Server, les requêtes sur un document XML qui contient des chaînes sur une certaine longueur (plus de 4 020 caractères) peuvent retourner des résultats incorrects. Dans SQL Server 2014, ces requêtes retournent les résultats corrects.
Changements de comportement dans SQL Server 2012
Découverte des métadonnées
Les améliorations apportées au moteur de base de données à compter de SQL Server 2012 permettent à SQLDescribeCol d’obtenir des descriptions plus précises des résultats attendus que ceux retournés par SQLDescribeCol dans les versions précédentes de SQL Server. Pour plus d’informations, consultez Découverte des métadonnées.
L’option SET FMTONLY permettant de déterminer le format d’une réponse sans exécuter la requête est remplacée par sp_describe_first_result_set (Transact-SQL),sp_describe_undeclared_parameters (Transact-SQL),sys.dm_exec_describe_first_result_set (Transact-SQL) et sys.dm_exec_describe_first_result_set_for_object (Transact-SQL).
Modifications du comportement dans le script d'une tâche SQL Server Agent
À compter de SQL Server 2012, si vous créez un travail en copiant le script à partir d’un travail existant, le nouveau travail peut affecter par inadvertance le travail existant. Pour créer un travail à l’aide du script à partir d’un travail existant, supprimez manuellement le paramètre @schedule_uid qui est généralement le dernier paramètre de la section qui crée la planification de travail dans le travail existant. Vous créez ainsi une planification indépendante pour le nouveau travail sans affecter les travaux existants.
Assemblage de constantes pour les Fonctions CLR définies par l'utilisateur et les méthodes
À compter de SQL Server 2012, les objets CLR définis par l’utilisateur suivants sont désormais pliables :
- Fonctions CLR définies par l'utilisateur à valeur scalaire déterministes.
- Méthodes déterministes des types CLR définis par l'utilisateur.
Cette amélioration s'efforce d'améliorer les performances lorsque ces fonctions ou méthodes sont appelées plusieurs fois avec les mêmes arguments. Toutefois, cette modification peut générer des résultats inattendus lorsque des fonctions ou méthodes non déterministes ont été marquées comme étant déterministes par erreur. Le déterminisme d'une fonction ou d'une méthode CLR est indiqué par la valeur de la propriété IsDeterministic
de SqlFunctionAttribute
ou de SqlMethodAttribute
.
Le comportement de la méthode de STEnvelope() a changé avec les types spatiaux vides
Le comportement de la STEnvelope
méthode avec des objets vides est désormais cohérent avec celui d’autres méthodes spatiales SQL Server.
Dans SQL Server 2008, la STEnvelope
méthode a retourné les résultats suivants lorsqu’elle est appelée avec des objets vides :
SELECT geometry::Parse('POINT EMPTY').STEnvelope().ToString()
-- returns POINT EMPTY
SELECT geometry::Parse('LINESTRING EMPTY').STEnvelope().ToString()
-- returns LINESTRING EMPTY
SELECT geometry::Parse('POLYGON EMPTY').STEnvelope().ToString()
-- returns POLYGON EMPTY
Dans SQL Server 2012, la STEnvelope
méthode retourne désormais les résultats suivants lorsqu’elle est appelée avec des objets vides :
SELECT geometry::Parse('POINT EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY
SELECT geometry::Parse('LINESTRING EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY
SELECT geometry::Parse('POLYGON EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY
Pour déterminer si un objet spatial est vide, appelez la méthode STIsEmpty (geometry Data Type).
La fonction LOG dispose d'un nouveau paramètre facultatif
La LOG
fonction a désormais un paramètre de base facultatif. Pour plus d’informations, consultez LOG (Transact-SQL).
Le calcul des statistiques pour les opérations d'index partitionnés a changé
Dans SQL Server 2014, les statistiques ne sont pas créées en analysant toutes les lignes de la table lors de la création ou de la reconstruction d’un index partitionné. Au lieu de cela, l’optimiseur de requête utilise l’algorithme d’échantillonnage par défaut pour générer des statistiques. Après la mise à niveau d'une base de données avec des index partitionnés, vous pouvez remarquer une différence dans les données d'histogramme pour ces index. Cette modification du comportement peut ne pas affecter les performances des requêtes. Pour obtenir des statistiques sur les index partitionnés en analysant toutes les lignes de la table, utilisez CREATE STATISTICS
ou UPDATE STATISTICS
avec la clause FULLSCAN
.
La conversion de type de données par la méthode XML value a changé
Le comportement interne de la méthode value
de type de données xml
a changé. Cette méthode effectue une XQuery sur le xml et retourne une valeur scalaire du type de données SQL Server spécifié. Le type xs doit être converti en type de données SQL Server. Auparavant, la value
méthode convertissait en interne la valeur source en xs:string, puis convertissait la xs:string en type de données SQL Server. Dans SQL Server 2014, la conversion en xs:string est ignorée dans les cas suivants :
Type de données XS source | Type de données SQL Server de destination |
---|---|
byte short int entier long unsignedByte unsignedShort unsignedInt unsignedLong positiveInteger nonPositiveInteger negativeInteger nonNegativeInteger |
TINYINT SMALLINT int bigint Décimal numeric |
Décimal | Décimal numeric |
float | real |
double | float |
Le nouveau comportement améliore les performances lorsque la conversion intermédiaire peut être ignorée. Toutefois, lorsque la conversion des types de données échoue, des messages d'erreur différents de ceux qui ont été générés lors de la conversion à partir de la valeur xs:string intermédiaire s'affichent. Par exemple, si la méthode value n'a pas réussi à convertir la valeur int
100 000 en smallint
, le message d'erreur précédent était :
The conversion of the nvarchar value '100000' overflowed an INT2 column. Use a larger integer column.
Dans SQL Server 2014, sans la conversion intermédiaire en xs:string, le message d’erreur est :
Arithmetic overflow error converting expression to data type smallint.
Changement de comportement de sqlcmd.exe en mode XML
Il y a des changements de comportement si vous utilisez sqlcmd.exe en mode XML (commande:XML ON) lors de l’exécution d’une commande SELECT * à partir de T FOR XML ....
Message modifié par DBCC CHECKIDENT
Dans SQL Server 2012, le message retourné par la commande DBCC CHECKIDENT a changé uniquement lorsqu’il est utilisé avec RESEED new_reseed_value pour modifier la valeur d’identité actuelle. Le nouveau message est « Vérification des informations d’identité : valeur d’identité actuelle «< valeur> d’identité actuelle ». Exécution de DBCC terminée. Si DBCC vous a adressé des messages d'erreur, contactez l'administrateur système. »
Dans les versions antérieures, le message est « Vérification des informations d’identité : valeur d’identité actuelle «< valeur> d’identité actuelle », valeur de colonne actuelle « valeur> de colonne actuelle ».< L’exécution de DBCC s’est terminée. Si DBCC a imprimé des messages d’erreur, contactez votre administrateur système. » Le message est inchangé quand DBCC CHECKIDENT
est spécifié avec NORESEED
, sans second paramètre ou sans valeur réensée. Pour plus d’informations, consultez DBCC CHECKIDENT (Transact-SQL).
Le comportement de la fonction exist() la fonction sur le type de données XML a changé
Le comportement de la fonction a changé lors de la exist()
comparaison d’un type de données XML avec une valeur null à 0 (zéro). Prenons l’exemple suivant :
DECLARE @test XML;
SET @test = null;
SELECT COUNT(1) WHERE @test.exist('/dogs') = 0;
Dans les versions antérieures, cette comparaison retournait 1 (true) ; maintenant, elle retourne 0 (zéro, false).
Les comparaisons suivantes n'ont pas changé :
DECLARE @test XML;
SET @test = null;
SELECT COUNT(1) WHERE @test.exist('/dogs') = 1; -- 0 expected, 0 returned
SELECT COUNT(1) WHERE @test.exist('/dogs') IS NULL; -- 1 expected, 1 returned
Voir aussi
Changements essentiels dans les fonctionnalités du moteur de base de données de SQL Server 2014
Fonctionnalités du moteur de base de données déconseillées dans SQL Server 2014
Discontinued Database Engine Functionality in SQL Server 2014 (Fonctionnalités du moteur de base de données non disponibles dans SQL Server 2014)
Niveau de compatibilité ALTER DATABASE (Transact-SQL)