Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Cette rubrique décrit les modifications de comportement dans le moteur de base de données. Les modifications 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 4020 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 à partir 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 La découverte des métadonnées.
L’option SET FMTONLY pour déterminer le format d’une réponse sans réellement 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 apportées au comportement dans l’écriture de scripts 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 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 du travail dans le travail existant. Cela crée une planification indépendante pour le nouveau travail sans affecter les travaux existants.
Pliage constant pour les fonctions et méthodes clR User-Defined
À compter de SQL Server 2012, les objets CLR définis par l’utilisateur suivants sont désormais pliables :
- Fonctions CLR déterministes définies par l’utilisateur à valeur scalaire.
- Méthodes déterministes des types CLR définis par l’utilisateur.
Cette amélioration vise à améliorer les performances lorsque ces fonctions ou méthodes sont appelées plusieurs fois avec les mêmes arguments. Toutefois, cette modification peut entraîner des résultats inattendus lorsque des fonctions ou méthodes non déterministes ont été marquées comme déterministes en cas d’erreur. Le déterminisme d’une fonction ou d’une méthode CLR est indiqué par la valeur de la propriété de SqlFunctionAttribute ou SqlMethodAttribute.
Comportement de la méthode STEnvelope() a changé avec des types spatiaux vides
Le comportement de la STEnvelope méthode avec des objets vides est désormais cohérent avec le comportement 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).
Log Function a un nouveau paramètre facultatif
La LOG fonction a maintenant un paramètre de base facultatif. Pour plus d’informations, consultez LOG (Transact-SQL).
Calcul des statistiques lors des 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 lorsqu’un index partitionné est créé ou reconstruit. 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 de la valeur XML a changé
Le comportement interne de la value méthode du type de xml données a changé. Cette méthode effectue une requête XQuery sur le code 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 a converti en interne la valeur source en xs :string, puis converti le 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 source XS | Type de données SQL Server de destination |
|---|---|
| octet court Int entier long octet non signé entier court non signé unsignedInt unsignedLong positiveInteger nonPositiveInteger negativeInteger entierNonNégatif |
tinyint smallint Int bigint décimal numérique |
| décimal | décimal numérique |
| flotter | réel |
| double | flotter |
Le nouveau comportement améliore les performances lorsque la conversion intermédiaire peut être ignorée. Toutefois, lorsque les conversions de type de données échouent, vous voyez des messages d’erreur différents de ceux qui ont été déclenchés lors de la conversion à partir de la valeur xs :string intermédiaire. Par exemple, si la méthode valeur n’a pas pu convertir la int valeur 100000 en un 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 conversion intermédiaire en xs :string, le message d’erreur est :
Arithmetic overflow error converting expression to data type smallint.
Changement de comportement sqlcmd.exe en mode XML
Il existe des modifications de comportement si vous utilisez sqlcmd.exe en mode XML (commande :XML ON) lors de l’exécution d’un SELECT * à partir de T FOR XML ....
Message révisé DBCC CHECKIDENT
Dans SQL Server 2012, le message retourné par la commande DBCC CHECKIDENT n’a changé que 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 a imprimé des messages d’erreur, contactez votre 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 ». Exécution DBCC terminée. Si DBCC a imprimé des messages d’erreur, contactez votre administrateur système. » Le message n’est pas modifié lorsqu’il DBCC CHECKIDENT est spécifié avec NORESEED, sans deuxième paramètre ou sans valeur reseed. Pour plus d’informations, consultez DBCC CHECKIDENT (Transact-SQL).
Le comportement de la fonction exist() sur le type de données XML a changé
Le comportement de la fonction exist() a changé lorsqu'on compare le type de données XML avec une valeur nulle à 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 retourne 1 (true) ; maintenant, cette comparaison 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 dépréciées du moteur de base de données dans SQL Server 2014
Fonctionnalités du moteur de base de données abandonnées dans SQL Server 2014
Niveau de compatibilité ALTER DATABASE (Transact-SQL)