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

Cette rubrique décrit les changements importants apportés au Moteur de base de données. 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 Utilisation du Conseiller de mise à niveau pour la préparation des mises à niveau.

Classements

Fonctionnalité

Description

Nouveaux classements

SQL Server 2008 introduit de nouveaux classements qui sont en alignement complet avec les 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.

Pour plus d'informations, consultez Définition et modification des classements.

CLR (Common Language Runtime)

Fonctionnalité

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 produit 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

Vue

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.

Plan d'exécution de requêtes

Caractéristique

Description

Schéma du plan d'exécution 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 Améliorations du traitement des requêtes sur les tables et les index partitionnés.

Schéma du plan d'exécution 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.

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

L'indicateur de table READPAST ne peut pas être spécifié quand l'option de base de données READ_COMMITTED_SNAPSHOT a la valeur ON et que l'une ou l'autre des conditions suivantes a la valeur True :

  • Le niveau d'isolation de la transaction de la session est READ COMMITTED.

  • L'indicateur READCOMMITTED de la table est également spécifié dans la requête.

Pour spécifier l'indicateur READPAST dans ces cas, supprimez l'indicateur de table READCOMMITTED s'il est présent et incorporez l'indicateur de table READCOMMITTEDLOCK dans la requête.

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édentNouveau nom de colonne
GroupNameRoleName
Group_nameRole_name
Group_idRole_id
Users_in_groupUsers_in_role

Chiffrement transparent des données

Le chiffrement transparent des données est effectué au niveau d'E/S : la structure de page est non chiffrée en mémoire et chiffrée uniquement lorsque la page est écrite sur 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. Pour plus d'informations, consultez Utilisation de XML avec les types de données time, date, datetime2 et datetimeoffset.

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).

Historique des modifications

Mise à jour du contenu

Ajout d'informations sur les changements importants en matière d'expressions XQuery et XPath.