Changements essentiels dans les fonctionnalités du moteur de base de données de SQL Server 2012

Cette rubrique décrit les modifications avec rupture apportées au Moteur de base de données SQL Server 2012 et aux versions antérieures de SQL Server. Ces modifications peuvent interrompre les applications, scripts ou fonctionnalités fondés sur les versions antérieures de SQL Server. Il se peut que vous rencontriez ces problèmes lors d'une mise à niveau. Pour plus d'informations, consultez Utiliser le Conseiller de mise à niveau pour la préparation des mises à niveau.

Dans cette rubrique

Changements essentiels apportés à SQL Server 2012

Modifications avec rupture dans SQL Server 2008/SQL Server 2008 R2

Changements essentiels apportés à SQL Server 2005

Changements essentiels apportés à SQL Server 2012

Transact-SQL

Caractéristique

Description

Sélection dans des colonnes ou des tables nommées NEXT

Les séquences utilisent la fonction ANSI standard NEXT VALUE FOR. Si une table ou une colonne est nommée NEXT, que la table ou la colonne a pour alias VALUE et que l'ANSI standard AS est omis, l'instruction obtenue peut provoquer une erreur. Pour contourner ce problème, incluez le mot clé ANSI standard AS. Par exemple, SELECT NEXT VALUE FROM Table doit être réécrit comme SELECT NEXT AS VALUE FROM Table et SELECT Col1 FROM NEXT VALUE doit être réécrit comme SELECT Col1 FROM NEXT AS VALUE.

PIVOT (opérateur)

L'opérateur PIVOT n'est pas autorisé dans une requête d'expression de table commune récursive lorsque le niveau de compatibilité de la base de données est défini à 110. Réécrivez la requête, ou définissez un niveau de compatibilité inférieur ou égal à 100. L'utilisation de l'opérateur PIVOT dans une requête d'expression de table commune récursive génère des résultats incorrects lorsqu'il y a plusieurs lignes par regroupement.

sp_setapprole et sp_unsetapprole

Le paramètre OUTPUT de cookie pour sp_setapprole est actuellement documenté comme varbinary(8000), ce qui correspond à la longueur maximale correcte. Toutefois, l'implémentation actuelle retourne varbinary(50). Les applications doivent continuer à réserver varbinary(8000) afin de continuer à fonctionner correctement si la taille de retour des cookies augmente dans une version ultérieure. Pour plus d'informations, consultez sp_setapprole (Transact-SQL).

EXECUTE AS

Le paramètre OUTPUT de cookie pour EXECUTE AS est actuellement documenté comme varbinary(8000), ce qui correspond à la longueur maximale correcte. Toutefois, l'implémentation actuelle retourne varbinary(100). Les applications doivent continuer à réserver varbinary(8000) afin de continuer à fonctionner correctement si la taille de retour des cookies augmente dans une version ultérieure. Pour plus d'informations, consultez EXECUTE AS (Transact-SQL).

sys.fn_get_audit_file, fonction

Deux colonnes supplémentaires (user_defined_event_id et user_defined_information) ont été ajoutées pour prendre en charge les événements d'audit définis par l'utilisateur. Les applications qui ne sélectionnent pas de colonnes par nom peuvent retourner plus de colonnes que prévu. Sélectionnez des colonnes par nom, ou modifiez l'application pour accepter ces colonnes supplémentaires.

Opérations CAST et CONVERT sur des colonnes calculées de type time ou datetime2

Dans les versions antérieures de SQL Server, le style par défaut pour les opérations CAST et CONVERT sur les types de données time et datetime2 est 121, sauf si l'un des types est utilisé dans une expression de colonne calculée. Pour les colonnes calculées, le style par défaut est 0. Ce comportement influe sur les colonnes calculées lorsqu'elles sont créées, utilisées dans des requêtes impliquant le paramétrage automatique, ou utilisées dans des définitions de contraintes.

Lorsque le niveau de compatibilité est 110, le style par défaut pour les opérations CAST et CONVERT sur les types de données time et datetime2 est toujours 121. Si votre requête repose sur l'ancien comportement, utilisez un niveau de compatibilité inférieur à 110, ou spécifiez explicitement le style 0 dans la requête affectée.

La mise à niveau de la base de données vers le niveau de compatibilité 110 ne modifie pas les données utilisateur stockées sur le disque. Vous devez corriger manuellement ces données comme il convient. Par exemple, si vous avez utilisé SELECT INTO pour créer une table à partir d'une source qui contenait une expression de colonne calculée décrite ci-dessus, les données (utilisant le style 0) sont stockées à la place de la définition de colonne calculée. Vous devez mettre à jour manuellement ces données pour qu'elles correspondent au style 121.

ALTER TABLE

L'instruction ALTER TABLE permet uniquement les noms de tables (schema.object) en deux parties. La spécification d'un nom de table à l'aide des formats suivants échoue au moment de la compilation avec l'erreur 117.

  • server.database.schema.table

  • .database.schema.table

  • ..schema.table

Dans les versions antérieures, la spécification du format server.database.schema.table retournait l'erreur 4902. La spécification du format .database.schema.table ou .schema.table aboutissait.

Pour résoudre le problème, supprimez l'utilisation d'un préfixe en quatre parties.

Exploration des métadonnées

L'interrogation d'une vue à l'aide de FOR BROWSE ou SET NO_BROWSETABLE ON retourne maintenant les métadonnées de la vue, et non pas les métadonnées de l'objet sous-jacent. Ce comportement correspond désormais à d'autres méthodes d'exploration de métadonnées.

SOUNDEX

Lorsque le niveau de compatibilité de la base de données est défini à 110, la fonction SOUNDEX implémente de nouvelles règles qui peuvent générer des valeurs calculées par la fonction qui sont différentes des valeurs calculées à des niveaux de compatibilité antérieurs. Après la mise à niveau vers le niveau de compatibilité 110, vous pouvez être amené à reconstruire les index, les segments de mémoire ou les contraintes CHECK qui utilisent la fonction SOUNDEX. Pour plus d'informations, consultez SOUNDEX (Transact-SQL).

Message de nombre de lignes pour les échecs d'instructions DML

Dans SQL Server 2012, le Moteur de base de données envoie régulièrement le jeton TDS DONE avec RowCount : 0 aux clients quand une instruction DML échoue. Dans les versions antérieures de SQL Server, la valeur incorrecte -1 est envoyée au client lorsque l'instruction DML qui échoue est contenue dans un bloc TRY-CATCH ou est automatiquement paramétrable par le Moteur de base de données ou lorsque le bloc TRY-CATCH n'est pas au même niveau que l'instruction qui échoue. Par exemple, si un bloc TRY-CATCH appelle une procédure stockée et une instruction DML dans la procédure échoue, le client ne reçoit pas correctement la valeur -1.

Les applications qui reposent sur ce comportement incorrect échouent.

SERVERPROPERTY (‘Edition’)

Édition du produit installée de l'instance de SQL Server 2012. Utilisez la valeur de cette propriété pour déterminer les fonctionnalités et les limites, par exemple le nombre maximal de processeurs qui sont pris en charge par le produit installé.

Selon l'édition Enterprise installée, « Enterprise Edition » ou « Enterprise Edition : contrat de licence selon le nombre de cœurs » peut être retourné. Les éditions Enterprise sont différenciées selon la capacité maximale de calcul par une seule instance de SQL Server. Pour plus d'informations sur les limites de capacité de calcul dans SQL Server 2012, consultez Limites de capacité de calcul par l'édition de SQL Server.

CREATE LOGIN

L'option CREATE LOGIN WITH PASSWORD = 'password' HASHED ne peut pas être utilisée avec des hachages créés par SQL Server 7 ou antérieur.

Opérations CAST et CONVERT pour datetimeoffset

Les seuls styles pris en charge lors de la conversion des types de date et d'heure en datetimeoffset sont 0 ou 1. Tous les autres styles de conversion retournent une erreur 9809. Par exemple, le code suivant retourne une erreur 9809.

SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107);

SET ROWCOUNT

Le comportement de SET ROWCOUNT a été changé de façon à améliorer l'efficacité de nombreuses requêtes courantes et il peut affecter les plans de requêtes pour les niveaux de compatibilité 110 et supérieurs. Une erreur peut survenir quand l'instruction SET ROWCOUNT change la valeur de ROWCOUNT en 0, ou de 0 en une autre valeur après une instruction DECLARE CURSOR et avant une instruction FETCH. Pour éviter cette erreur, définissez le niveau de compatibilité de la base de données à 100 ou définissez ROWCOUNT en dehors des instructions de curseur.

Vues de gestion dynamique

Affichage

Description

sys.dm_exec_requests

La colonne de commande passe de nvarchar(16) à nvarchar(32).

sys.dm_os_memory_cache_counters

Les colonnes suivantes ont été renommées.

Nom de colonne précédent

Nouveau nom de colonne

single_pages_kb

pages_kb

multi_pages_kb

pages_in_use_kb

sys.dm_os_memory_cache_entries

La colonne pages_allocated_count a été renommée pages_kb.

sys.dm_os_memory_clerks

La colonne multi_pages_kb a été supprimée.

La colonne single_pages_kb a été renommée pages_kb.

sys.dm_os_memory_nodes

Les colonnes suivantes ont été renommées.

Nom de colonne précédent

Nouveau nom de colonne

single_pages_kb

pages_kb

multi_pages_kb

foreign_committed_kb

sys.dm_os_memory_objects

Les colonnes suivantes ont été renommées.

Nom de colonne précédent

Nouveau nom de colonne

pages_allocated_count

pages_in_bytes

max_pages_allocated_count

max_pages_in_bytes

sys.dm_os_sys_info

Les colonnes suivantes ont été renommées.

Nom de colonne précédent

Nouveau nom de colonne

physical_memory_in_bytes

physical_memory_kb

bpool_commit_target

committed_target_kb

bpool_visible

visible_target_kb

virtual_memory_in_bytes

virtual_memory_kb

bpool_commited

committed_kb

sys.dm_os_workers

La colonne de paramètres régionaux a été supprimée.

Affichages catalogue

Affichage

Description

sys.data_spaces

sys.partition_schemes

sys.filegroups

sys.partition_functions

Une nouvelle colonne, is_system, a été ajoutée à sys.data_spaces et sys.partition_functions. (sys.partition_schemes et sys.filegroups héritent des colonnes de sys.data_spaces.)

La valeur 1 dans cette colonne indique que l'objet est utilisé pour les fragments d'index de recherche en texte intégral.

Dans sys.partition_functions, sys.partition_schemes et sys.filegroups, la nouvelle colonne n'est pas la dernière colonne. Modifiez les requêtes existantes qui reposent sur l'ordre des colonnes retournées par ces affichages catalogue.

Types de données SQL CLR (geometry, geography et hierarchyid)

L'assembly Microsoft.SqlServer.Types.dll, qui contient les types de données spatiales et le type hierarchyid, a été mis à niveau de la version 10.0 vers la version 11.0. Les applications personnalisées qui font référence à cet assembly peuvent échouer lorsque les conditions suivantes sont remplies.

  • Lorsque vous déplacez une application personnalisée d'un ordinateur sur lequel SQL Server 2008 R2 a été installé vers sur un ordinateur sur lequel seul SQL Server 2012 est installé, l'application échoue, car la version référencée 10.0 de l'assembly SqlTypes n'est pas présente. Le message d'erreur suivant peut s'afficher : “Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.”

  • Quand vous faites référence à l'assembly SqlTypes version 11.0, et que la version 10.0 est également installée, le message d'erreur suivant peut s'afficher : “System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'.”

  • Si vous référencez la version 11.0 de l'assembly SqlTypes d'une application personnalisée qui cible le .NET 3.5, 4 ou 4.5, l'application échoue, car SqlClient charge la version 10.0 de l'assembly. Cette erreur se produit lorsque l'application appelle l'une des méthodes suivantes :

    • méthode GetValue de la classe SqlDataReader

    • méthode GetValues de la classe SqlDataReader

    • opérateur d'index de crochets [] de la classe SqlDataReader

    • méthode ExecuteScalar de la classe SqlCommand

Vous pouvez contourner ce problème en utilisant l’une des méthodes suivantes :

  • Vous pouvez contourner ce problème dans votre code en appelant la méthode GetSqlBytes, au lieu des méthodes Get répertoriées ci-dessus, pour extraire les types de systèmes CLR SQL Server, comme le montre l'exemple suivant :

    string query = "SELECT [SpatialColumn] FROM [SpatialTable]";
          using (SqlConnection conn = new SqlConnection("..."))
          {
                SqlCommand cmd = new SqlCommand(query, conn);
    
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
    
                while (reader.Read())
                {
                      // In version 11.0 only
                      SqlGeometry g = 
    SqlGeometry.Deserialize(reader.GetSqlBytes(0));
    
                      // In version 10.0 or 11.0
                      SqlGeometry g2 = new SqlGeometry();
                      g.Read(new BinaryReader(reader.GetSqlBytes(0).Stream));
                }
          }
    
  • Vous pouvez contourner ce problème en utilisant la redirection d'assembly dans le fichier de configuration de l'application, comme le montre l'exemple suivant :

    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        ...
        <dependentAssembly>
            <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
            <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />
        </dependentAssembly>
        ...
    </assemblyBinding>
    <runtime>
    
  • Vous pouvez contourner ce problème dans votre chaîne de connexion en spécifiant la valeur « SQL Server 2012 » pour que de l'attribut « Type System Version » force SqlClient à charger la version 11.0 de l'assembly. Cet attribut de chaîne de connexion est uniquement disponible dans le .NET 4.5 et versions ultérieures.

  • La balise assemblyBinding doit être encapsulée sous la balise runtime.

Prise en charge d'AWE

La prise en charge d'AWE (Address Windowing Extensions) 32 bits a été arrêtée. Cela peut entraîner une baisse des performances sur les systèmes d'exploitation 32 bits. Pour les installations utilisant de grandes quantités de mémoire, migrez vers un système d'exploitation 64 bits.

Les fonctions XQuery prennent en charge la substitution

La recommandation du W3C pour les fonctions et les opérateurs XQuery exigent qu'ils prennent en charge une paire de substitution qui représente un caractère Unicode à plage élevée en tant que glyphe unique dans l'encodage UTF-16. Toutefois, dans les versions de SQL Server antérieures à SQL Server 2012, les fonctions de chaîne ne reconnaissaient pas les paires de substitution comme caractère unique. Certaines opérations de chaîne, telles que les calculs de longueur de chaîne et les extractions de sous-chaîne, retournaient des résultats incorrects. SQL Server 2012 prend désormais entièrement en charge UTF-16 et la gestion correcte des paires de substitution.

Le type de données XML dans SQL Server autorise uniquement les paires de substitution bien formées. Toutefois, certaines fonctions peuvent toujours retourner des résultats indéfinis ou inattendus dans certaines circonstances, étant donné qu'il est possible de passer des paires de substitution non valides ou partielles aux fonctions XQuery comme valeurs de chaîne. Tenez compte des méthodes suivantes pour générer des valeurs de chaîne en utilisant XQuery dans SQL Server :

  • Fournissez une valeur de chaîne constante comme valeur binaire. Lorsque vous utilisez cette méthode, il est possible de passer des paires de substitution non valides ou partielles.

  • Fournissez une valeur de chaîne constante en fournissant des entités de caractère. Lorsque vous utilisez cette méthode, il est impossible de passer des paires de substitution non valides. Les fonctions XQuery requièrent une entité de caractère unique pour le caractère de niveau supérieur. Ces fonctions génèrent une erreur si les entités de caractère pour les caractères de paire de substitution sont fournies.

  • Importez des valeurs externes à l'aide de sql:column ou sql:variable. En utilisant ces méthodes, il est possible d'introduire des paires de substitution non valides ou partielles.

Fonctions et opérateurs XQuery affectés

Les fonctions et opérateurs XQuery suivants gèrent maintenant les paires de substitution UTF-16 correctement dans SQL Server 2012 :

  • fn:string-length. Toutefois, si une paire de substitution non valide ou partielle est passée comme argument, le comportement de string-length n'est pas défini.

  • fn:substring.

  • fn:contains. Toutefois, si une paire de substitution partielle est passée comme valeur, contains peut retourner des résultats inattendus, car il peut rechercher la paire de substitution partielle contenue dans la paire de substitution bien formée.

  • fn:concat. Toutefois, si une paire de substitution partielle est passée comme valeur, concat peut produire des paires de substitution incorrectes ou partielles.

  • Opérateurs de comparaison et clause order by. Les opérateurs de comparaison incluent +, <, >, <=, >=, eq, lt, gt, le et ge.

Appels de requête distribuée à une procédure système

Les appels de requête distribuée via OPENQUERY à certaines procédures système échouent lorsque l'appel est effectué d'un serveur à un autre. Ceci se produit lorsque le Moteur de base de données ne peut pas découvrir les métadonnées pour une procédure. Par exemple, SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').

Compatibilité descendante

Le nouveau comportement dépend du niveau de compatibilité

Les fonctions et opérateurs suivants illustrent le nouveau comportement décrit ci-dessus uniquement lorsque le niveau de compatibilité est supérieur ou égal à 110 :

  • fn:contains.

  • fn:concat.

  • opérateurs de comparaison et clause order by

Le nouveau comportement dépend de l'URI d'espace de noms par défaut des fonctions

Les fonctions suivantes illustrent le nouveau comportement décrit ci-dessus uniquement lorsque l'URI d'espace de noms par défaut correspond à l'espace de noms dans la recommandation finale, c.-à-d., http://www.w3.org/2005/xpath-functions. Lorsque le niveau de compatibilité est supérieur ou égal à 110, alors par défaut SQL Server 2012 lie l'espace de noms de fonction par défaut à cet espace de noms. Toutefois ces fonctions illustrent le nouveau comportement lorsque cet espace de noms est utilisé quel que soit le niveau de compatibilité.

  • fn:string-length

  • fn:substring

Icône de flèche utilisée avec le lien Retour en hautRetour en haut de page

Modifications avec rupture dans SQL Server 2008/SQL Server 2008 R2

Cette section contient les modifications avec rupture introduites dans SQL Server 2008. Aucune modification n'a été introduite dans SQL Server 2008 R2.

Classements

Caractéristique

Description

Nouveaux classements

SQL Server 2008 introduit de nouveaux classements qui sont parfaitement alignés aux classements fournis par Windows Server 2008. Ces 80 nouveaux classements présentent une précision linguistique améliorée et sont dénotés par des références de version *_100. Si vous choisissez un nouveau classement pour votre serveur ou base de données, gardez à l'esprit que le classement peut ne pas être reconnu par les clients équipés de pilotes clients plus anciens. En raison des classements non reconnus, l'application peut retourner des erreurs et échouer. Envisagez les solutions suivantes :

  • Mettez à niveau le système d'exploitation du client afin de mettre aussi à jour les classements du système sous-jacent.

  • Si le client est équipé du logiciel client de base de données, envisagez de lui appliquer une mise à jour du service.

  • Choisissez un classement existant qui établit un mappage à une page de codes du client.

CLR (Common Language Runtime)

Caractéristique

Description

Assemblys CLR

Lorsqu'une base de données est mise à niveau vers SQL Server 2008, l'assembly Microsoft.SqlServer.Types destiné à prendre en charge de nouveaux types de données est automatiquement installé. Les règles du Conseiller de mise à niveau détectent tout type d'utilisateur ou assembly avec des noms en conflit. Le Conseiller de mise à niveau recommandera de renommer tout assembly incompatible, et de renommer tout type en conflit ou d'utiliser des noms en deux parties dans le code pour faire référence à ce type d'utilisateur préexistant.

Si une mise à niveau de base de données détecte un assembly utilisateur avec un nom en conflit, elle renommera automatiquement cet assembly et placera la base de données en mode suspect.

Si un type d'utilisateur avec un nom en conflit existe pendant la mise à niveau, aucune étape spéciale n'est suivie. Après la mise à niveau, l'ancien type d'utilisateur et le nouveau type de système existeront tous deux. Le type d'utilisateur sera disponible uniquement en utilisant des noms en deux parties.

Assemblys CLR

SQL Server 2008 installe .NET Framework 3.5 SP1, qui met à jour les bibliothèques dans le GAC (Global Assembly Cache). Si des bibliothèques non prises en charge sont inscrites dans une base de données SQL Server, votre application SQL Server peut cesser de fonctionner après la mise à niveau vers SQL Server 2008. Cela est dû au fait que la maintenance ou la mise à niveau de bibliothèques dans le GAC ne met pas à jour les assemblys à l'intérieur de SQL Server. Si un assembly existe dans une base de données SQL Server et dans le GAC, les deux copies de l'assembly doivent être exactement les mêmes. Si ce n'est pas le cas, une erreur se produira lorsque l'assembly est utilisé par l'intégration du CLR SQL Server. Pour plus d'informations, consultez Bibliothèques .NET Framework prises en charge.

Après la mise à niveau de votre base de données, effectuez la maintenance ou la mise à niveau de la copie de l'assembly à l'intérieur de vos bases de données SQL Server avec l'instruction ALTER ASSEMBLY. Pour plus d’informations, consultez l'article 949080 de la Base de connaissances.

Exécutez la requête suivante dans votre base de données pour détecter si vous utilisez une bibliothèque .NET Framework non prise en charge dans votre application.

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';

Routines CLR

Le recours à l'emprunt d'identité dans des fonctions CLR définies par l'utilisateur, des agrégats définis par l'utilisateur ou des types définis par l'utilisateur (UDT) peut entraîner une défaillance de votre application avec l'erreur 6522 suite à une mise à niveau vers SQL Server 2008.

Les scénarios suivants réussissent dans SQL Server 2005 mais échouent dans SQL Server 2008. Des résolutions sont fournies pour chaque scénario.

  1. Une fonction CLR définie par l'utilisateur, un agrégat défini par l'utilisateur ou une méthode UDT qui a recours à l'emprunt d'identité comporte un paramètre de type nvarchar(max), varchar(max), varbinary(max), ntext, text, image ou un type UDT volumineux et n'a pas d'attribut DataAccessKind.Read sur la méthode.

    Pour résoudre ce problème, ajoutez l'attribut DataAccessKind.Read sur la méthode, recompilez l'assembly et redéployez la routine et l'assembly.

  2. Une fonction table CLR qui a une méthode Init effectue un emprunt d'identité.

    Pour résoudre ce problème, ajoutez l'attribut DataAccessKind.Read sur la méthode, recompilez l'assembly et redéployez la routine et l'assembly.

  3. Une fonction table CLR qui a une méthode FillRow effectue un emprunt d'identité.

    Pour résoudre ce problème, supprimez l'emprunt d'identité de la méthode FillRow. N'accédez pas à des ressources externes à l'aide de la méthode FillRow. Au lieu de cela, accédez à des ressources externes à l'aide de la méthode Init.

Vues de gestion dynamique

Affichage

Description

sys.dm_os_sys_info

Suppression des colonnes cpu_ticks_in_ms et sqlserver_start_time_cpu_ticks.

sys.dm_exec_query_resource_semaphores sys.dm_exec_query_memory_grants

La colonne resource_semaphore_id n'est pas un ID unique dans SQL Server 2008. Cette modification peut affecter l'exécution de la requête de résolution des problèmes. Pour plus d'informations, consultez sys.dm_exec_query_resource_semaphores (Transact-SQL).

Erreurs et événements

Caractéristique

Description

Erreurs de connexion

Dans SQL Server 2005, l'erreur 18452 est retournée lorsqu'une connexion SQL est utilisée pour la connexion à un serveur configuré pour utiliser uniquement l'authentification Windows. Dans SQL Server 2008, l'erreur 18456 est retournée à la place.

Showplan.

Caractéristique

Description

schéma Showplan XML

Un nouvel élément SeekPredicateNew est ajouté au schéma du plan d'exécution XML et la séquence xsd englobante (SqlPredicatesType) est convertie en élément <xsd:choice>. À la place d'un ou de plusieurs éléments SeekPredicate, un ou plusieurs éléments SeekPredicateNew peuvent à présent s'afficher dans le plan d'exécution XML. Les deux éléments s'excluent mutuellement. L'élément SeekPredicate est conservé dans le schéma du plan d'exécution XML pour la compatibilité descendante ; toutefois, les plans de requêtes créés dans SQL Server 2008 peuvent contenir l'élément SeekPredicateNew. Les applications qui s'attendent à récupérer uniquement l'enfant SeekPredicate à partir du nœud ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates peuvent échouer si l'élément SeekPredicate n'existe pas. Écrivez à nouveau l'application pour qu'elle attende l'élément SeekPredicate ou SeekPredicateNew dans ce nœud. Pour plus d'informations, consultez .

schéma Showplan XML

Un nouvel attribut IndexKind est ajouté au type complexe ObjectType dans le schéma du plan d'exécution XML. Les applications qui valident de façon stricte les plans SQL Server sur le schéma SQL Server 2005 échouent.

Transact-SQL

Caractéristique

Description

Événement DDL ALTER_AUTHORIZATION_DATABASE

Dans SQL Server 2005, lorsque l'événement DDL ALTER_AUTHORIZATION_DATABASE est déclenché, la valeur « object » est retournée dans l'élément ObjectType du fichier EVENTDATA xml pour cet événement lorsque le type d'entité de l'élément sécurisable dans l'opération de langage de définition de données (DDL) est un objet. Dans SQL Server 2008, le type réel (par exemple, « table » ou « function ») est retourné.

CONVERT

Si un style non valide est passé à la fonction CONVERT, une erreur est retournée lorsque la conversion est de type binaire à caractère ou caractère à binaire. Dans les versions antérieures de SQL Server, le style non valide est défini sur le style par défaut pour les conversions binaire à caractère et caractère à binaire.

GRANT/DENY/REVOKE EXECUTE sur les assemblys

L'autorisation EXECUTE ne peut pas être accordée, révoquée ou refusée sur les assemblys. Cette autorisation n'a aucun effet et provoque à présent une erreur. Accordez, refusez ou révoquez une autorisation EXECUTE sur les procédures stockées ou fonctions qui font plutôt référence à la méthode d'assembly.

Autorisations GRANT/DENY/REVOKE sur les types de systèmes

Les autorisations ne peuvent pas être accordées, révoquées ou refusées sur les types de systèmes. Dans les versions antérieures de SQL Server, ces instructions sont correctement exécutées, mais n'ont aucun effet. Dans SQL Server 2008, une erreur est retournée.

GROUP BY

La clause GROUP BY ne peut pas contenir de sous-requête dans une expression utilisée pour la liste GROUP BY. Dans les versions antérieures de SQL Server, cela était autorisé. Dans SQL Server 2008, l'erreur 144 est retournée.

Par exemple, le code suivant réussit dans SQL Server 2005 et échoue dans SQL Server 2008.

DECLARE @Test TABLE(a int NOT NULL);
INSERT INTO @Test SELECT 1 union ALL SELECT 2;
SELECT COUNT(*) 
FROM @Test
GROUP BY CASE WHEN a IN (SELECT t.a FROM @Test AS t)
THEN 1 ELSE 0 
END;

Clause OUTPUT

Pour empêcher tout comportement non déterministe, la clause OUTPUT ne peut pas référencer une colonne d'une vue ou fonction table lorsque cette colonne est définie par l'une des méthodes suivantes :

  • Une sous-requête.

  • Une fonction définie par l'utilisateur qui offre un accès à des données utilisateur ou système, ou qui est supposée permettre d'y accéder.

  • Une colonne calculée qui contient une fonction définie par l'utilisateur qui offre un accès aux données utilisateur ou système dans sa définition.

Lorsque SQL Server détecte une telle colonne dans la clause OUTPUT, l'erreur 4186 est générée. Pour plus d'informations, consultez MSSQLSERVER_4186.

Clause OUTPUT INTO

La table cible de la clause OUTPUT INTO ne peut pas comporter de déclencheurs activés.

Option de niveau serveur precompute rank

Cette option n'est pas prise en charge dans SQL Server 2008. Modifiez dès que possible les applications qui utilisent actuellement cette fonction.

Indicateur de table READPAST

Vous ne pouvez pas spécifier l'indicateur READPAST sous l'isolement d'instantané.

L'indicateur READPAST est ignoré lorsque l'option de base de données READ_COMMITED_SNAPSHOT ou ALLOW_SNAPSHOT_ISOLATION est activée (ON). Toutefois, si vous combinez l'indicateur READPAST avec READCOMMITTEDLOCK, le comportement de READPAST correspond à l'indicateur de blocage READCOMMITTED.

sp_helpuser

Les noms de colonnes suivants qui sont retournés dans le jeu de résultats de la procédure stockée sp_helpuser ont changé.

Nom de colonne précédent

Nouveau nom de colonne

GroupName

RoleName

Group_name

Role_name

Group_id

Role_id

Users_in_group

Users_in_role

Chiffrement transparent des données

Le chiffrement transparent des données (TDE) est effectué au niveau des E/S : la structure de la page n'est pas chiffrée en mémoire et est chiffrée uniquement quand la page est écrite sur le disque. Les fichiers de bases de données et les fichiers journaux sont tous deux chiffrés. Les applications tierces qui ignorent le mécanisme SQL Server standard pour accéder aux pages (par exemple, en analysant directement les fichiers de données ou journaux) échouent lorsqu'une base de données utilise le chiffrement transparent des données, car les données sont chiffrées dans les fichiers. De telles applications peuvent exploiter l'API de chiffrement Windows pour développer une solution pour déchiffrer les données à l'extérieur de SQL Server.

XQuery

Caractéristique

Description

Prise en charge de la date et de l'heure

Dans SQL Server 2005, les types de données xs:time, xs:date et xs:dateTime n'ont pas de prise en charge de fuseau horaire. Les données de fuseau horaire sont mappées au fuseau horaire UTC. SQL Server 2008 présente un comportement conforme standard qui a pour conséquence les modifications suivantes :

  • Les valeurs sans fuseau horaire sont validées.

  • Le fuseau horaire fourni ou l'absence de fuseau horaire est un paramètre conservé.

  • La représentation de stockage interne est modifiée.

  • La résolution des valeurs stockées est augmentée.

  • Les années négatives ne sont pas autorisées.

Modifiez les applications et expressions XQuery pour prendre en compte les nouvelles valeurs de type.

Expressions XQuery et XPath

Dans SQL Server 2005, les étapes d'une expression XQuery ou XPath qui commencent par un signe deux-points (« : ») sont autorisées. Par exemple, l'instruction suivante contient un test de nom (CTR02) dans l'expression XPath qui commence par un signe deux-points.

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

Dans SQL Server 2008, cette utilisation est rejetée, car elle n'est pas conforme aux normes XML. L'erreur 9341 est retournée. Supprimez le signe deux-points de début ou spécifiez un préfixe pour le test de nom, par exemple (n$/CTR02) ou (n$/p1:CTR02).

Connecting

Caractéristique

Description

Connexion depuis SQL Server Native Client à l'aide de SSL

Lors de la connexion à SQL Server Native Client, les applications qui utilisent "SERVER=shortname; FORCE ENCRYPTION=true" avec un certificat dont les objets spécifient des noms de domaine complet (FQDN) se sont connectées par le passé en raison d'une validation souple. SQL Server 2008 R2 améliore la sécurité en mettant en vigueur des objets de nom de domaine complet pour les certificats. Les applications qui reposent sur une validation souple doivent entreprendre l'une des actions suivantes :

  • Utiliser le nom de domaine complet dans la chaîne de connexion.

    • Cette option ne requiert pas la recompilation de l'application si le mot clé SERVER de la chaîne de connexion est configuré à l'extérieur de l'application.

    • Cette option ne fonctionne pas pour les applications dont les chaînes de connexion sont codées en dur.

    • Cette option ne fonctionne pas pour les applications qui utilisent la mise en miroir de bases de données puisque le serveur en miroir répond avec un nom ordinaire.

  • Ajouter un alias pour le nom court à mapper sur le nom de domaine complet.

    • Cette option fonctionne même pour les applications dont les chaînes de connexion sont codées en dur.

    • Cette option ne fonctionne pas pour les applications qui utilisent la mise en miroir de bases de données puisque les fournisseurs ne recherchent pas les alias pour les noms des partenaires de basculement reçus.

  • Faire en sorte qu'un certificat soit émis pour le nom court.

    • Cette option fonctionne pour toutes les applications.

Icône de flèche utilisée avec le lien Retour en hautRetour en haut de page

Changements essentiels apportés à SQL Server 2005

Pour obtenir la liste des modifications avec rupture introduites dans SQL Server 2005, consultez Modifications avec rupture apportées aux fonctionnalités du moteur de base de données dans SQL Server 2005.

Voir aussi

Référence

Fonctionnalités du moteur de base de données déconseillées dans SQL Server 2012

Changements de comportement des fonctionnalités du moteur de base de données de SQL Server 2012

Fonctionnalités du moteur de base de données supprimées dans SQL Server 2012

Niveau de compatibilité ALTER DATABASE (Transact-SQL)

Autres ressources

Compatibilité descendante du moteur de base de données SQL Server