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 critiques du moteur de base de données de SQL Server 2014 et des 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 l’Conseiller de mise à niveau pour préparer les mises à niveau.
Changements cassants dans SQL Server 2014
Aucun nouveau problème.
Modifications apportant des ruptures dans SQL Server 2012
Transact-SQL
| Caractéristique | Descriptif |
|---|---|
| Sélectionner dans les colonnes ou les tables nommées NEXT | Les séquences utilisent la fonction standard ANSI NEXT VALUE FOR. Si une table ou une colonne est nommée NEXT et que la table ou la colonne est renommée en tant que VALEUR, et si l'AS standard ANSI est omis, l'instruction résultante peut provoquer une erreur. Pour contourner ce problème, incluez le mot clé "AS" selon la norme ANSI. Par exemple, SELECT NEXT VALUE FROM Table doit être réécrit comme et SELECT Col1 FROM NEXT VALUE doit être réécrit en tant que SELECT NEXT AS VALUE FROM TableSELECT Col1 FROM NEXT AS VALUE. |
| Opérateur PIVOT | L’opérateur PIVOT n’est pas autorisé dans une requête DTE (Common Table Expression) récursive lorsque le niveau de compatibilité de la base de données est défini sur 110. Réécrire la requête ou remplacer le niveau de compatibilité par 100 ou inférieur. L’utilisation de PIVOT dans une requête CTE récursive produit des résultats incorrects lorsqu’il existe plus d’une seule ligne par regroupement. |
| sp_setapprole et sp_unsetapprole | Le paramètre de cookie OUTPUT pour sp_setapprole est actuellement documenté comme étant varbinary(8000), ce qui est la longueur maximale correcte. Toutefois, l’implémentation actuelle retourne varbinary(50). Les applications doivent continuer à réserver varbinary(8000) afin que l’application continue de fonctionner correctement si la taille de retour du cookie augmente dans une prochaine version. Pour plus d’informations, consultez sp_setapprole (Transact-SQL). |
| EXECUTER EN TANT QUE | Le paramètre OUTPUT de cookie pour EXECUTE AS est actuellement documenté comme varbinary(8000) étant la longueur maximale correcte. Toutefois, l’implémentation actuelle retourne varbinary(100). Les applications doivent continuer à réserver varbinary(8000) afin que l’application continue de fonctionner correctement si la taille de retour du cookie augmente dans une prochaine version. Pour plus d’informations, consultez EXECUTE AS (Transact-SQL). |
| fonction sys.fn_get_audit_file | 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 ajustez l’application pour accepter ces colonnes supplémentaires. |
| Mot clé réservé « WITHIN » | WITHIN est maintenant un mot clé réservé. Les références aux objets ou aux colonnes nommées « within » échouent. Renommez l’objet ou la colonne ou délimitez le nom à l’aide de crochets ou de guillemets. Par exemple : SELECT * FROM [within]. |
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 lorsque l’un ou l’autre type 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.Au niveau de compatibilité 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 (à l’aide du style 0) sont stockées plutôt que la définition de colonne calculée elle-même. Vous devez mettre à jour manuellement ces données pour qu'elles correspondent au style 121. |
| ALTER TABLE | L’instruction ALTER TABLE autorise uniquement les noms de tables en deux parties (schema.object). La spécification d’un nom de table à l’aide des formats suivants échoue désormais au moment de la compilation avec l’erreur 117 : serveur.base_de_données.schéma.table .database.schema.table .. schema.table Dans les versions antérieures spécifiant le format server.database.schema.table a retourné l’erreur 4902. Spécification du format .database.schema.table ou du format .. schema.table a réussi. Pour résoudre le problème, supprimez l’utilisation d’un préfixe en 4 parties. |
| Parcourir les métadonnées | L’interrogation d’une vue à l’aide de FOR BROWSE ou SET NO_BROWSETABLE ON retourne désormais les métadonnées de l’affichage, et non les métadonnées de l’objet sous-jacent. Ce comportement correspond désormais aux autres méthodes de navigation des métadonnées. |
| SOUNDEX | Sous le niveau de compatibilité de la base de données 110, la fonction SOUNDEX implémente de nouvelles règles susceptibles de faire en sorte que les valeurs calculées par la fonction soient différentes des valeurs calculées sous les niveaux de compatibilité antérieurs. Après la mise à niveau vers le niveau de compatibilité 110, vous devrez peut-être 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 comptage de lignes pour les instructions DML échouées | Dans SQL Server 2012, le moteur de base de données envoie constamment le jeton TDS DONE avec RowCount : 0 aux clients lorsqu’une instruction DML échoue. Dans les versions antérieures de SQL Server, une valeur incorrecte de -1 est envoyée au client lorsque l’instruction DML qui échoue est contenue dans un bloc TRY-CATCH et est paramétrée automatiquement par le moteur de base de données ou le bloc TRY-CATCH n’est pas au même niveau que l’instruction ayant échoué. Par exemple, si un bloc TRY-CATCH appelle une procédure stockée et qu’une instruction DML dans la procédure échoue, le client reçoit incorrectement une valeur -1. Les applications qui s’appuient sur ce comportement incorrect échouent. |
| PROPRIÉTÉ_SERVEUR ('Édition') | Édition de 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, telles que le nombre maximal de processeurs pris en charge par le produit installé. En fonction de l’édition Entreprise installée, cela peut retourner « Enterprise Edition » ou « Enterprise Edition : Core-based Licensing ». Les éditions Entreprise sont différenciées en fonction de la capacité de calcul maximale 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 édition de SQL Server. |
| CRÉER UNE CONNEXION | L’option CREATE LOGIN WITH PASSWORD = 'de mot de passe' HASHED ne peut pas être utilisée avec des hachages créés par SQL Server 7 ou une version antérieure. |
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 de type 0 ou 1. Tous les autres styles de conversion retournent l’erreur 9809. Par exemple, le code suivant retourne l’erreur 9809.SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107); |
Vues de gestion dynamique
| Afficher | Descriptif |
|---|---|
| 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 : single_pages_kb est désormais : pages_kb multi_pages_kb est maintenant : pages_in_use_kb |
| sys.dm_os_memory_cache_entries | La colonne pages_allocated_count a été renommée en 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 : single_pages_kb est maintenant : pages_kb multi_pages_kb est maintenant : kilo-octets_étrangers_engagés |
| sys.dm_os_memory_objects | Les colonnes suivantes ont été renommées. Le nombre de pages allouées est maintenant : pages_en_octets max_pages_allocated_count est maintenant : max_pages_in_bytes |
| sys.dm_os_sys_info | Les colonnes suivantes ont été renommées : physical_memory_in_bytes est maintenant : mémoire_physique_kb bpool_commit_target est maintenant : objectif_engagé_kb bpool_visible est maintenant : visible_target_kb virtual_memory_in_bytes est maintenant : virtual_memory_kb bpool_commited est maintenant : committed_kb |
| sys.dm_os_workers | La colonne de paramètres régionaux a été supprimée. |
Vues du catalogue
| Afficher | Descriptif |
|---|---|
| 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 de cette colonne indique que l’objet est utilisé pour les fragments d’index de 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 s’appuient sur l’ordre des colonnes retournées à partir de ces vues de 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 référencent cet assembly peuvent échouer lorsque les conditions suivantes sont remplies.
Lorsque vous déplacez une application personnalisée à partir d’un ordinateur sur lequel SQL Server 2008 R2 a été installé sur un ordinateur sur lequel seul SQL Server 2014 est installé, l’application échoue car la version référencée 10.0 de l’assembly SqlTypes n’est pas présente. Ce message d’erreur 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."Lorsque vous référencez l’assembly SqlTypes version 11.0 et que la version 10.0 est également installée, ce message d’erreur peut s’afficher :
"System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'."Lorsque vous référencez l’assembly SqlTypes version 11.0 à partir d’une application personnalisée qui cible .NET 3.5, 4 ou 4.5, l’application échoue, car SqlClient par conception charge la version 10.0 de l’assembly. Cet échec se produit lorsque l’application appelle l’une des méthodes suivantes :
GetValueméthode de laSqlDataReaderclasseGetValuesméthode de laSqlDataReaderclasseopérateur d’index crochet [] de la
SqlDataReaderclasseExecuteScalarméthode de laSqlCommandclasse
Vous pouvez contourner ce problème à l’aide de l’une des méthodes suivantes :
Vous pouvez contourner ce problème dans votre code en appelant la
GetSqlBytesméthode, au lieu des méthodes Get répertoriées ci-dessus, pour récupérer les types de système CLR SQL Server, comme illustré dans 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 illustré dans 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 l’attribut « Type System Version » pour forcer SqlClient à charger la version 11.0 de l’assembly. Cet attribut de chaîne de connexion est disponible uniquement dans .NET 4.5 et versions ultérieures.
La
assemblyBindingbalise doit être encapsulée sous laruntimebalise.
Prise en charge d’AWE
La prise en charge des extensions de fenêtrage d’adresses 32 bits (AWE) est interrompue. Cela peut entraîner des performances plus lentes 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 sont Surrogate-Aware
La recommandation W3C pour les fonctions et les opérateurs XQuery les oblige à compter une paire de substitution qui représente un caractère Unicode à haute plage 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 en tant que caractère unique. Certaines opérations de chaîne , telles que les calculs de longueur de chaîne et les extractions de sous-chaînes, ont retourné 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 non définis ou inattendus dans certaines circonstances, car il est possible de passer des paires de substitution non valides ou partielles aux fonctions XQuery en tant que valeurs de chaîne. Tenez compte des méthodes suivantes pour générer des valeurs de chaîne lors de l’utilisation de XQuery dans SQL Server :
Fournissez une valeur de chaîne constante en tant que valeur binaire. Lorsque vous utilisez cette méthode, il reste 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ères. Lorsque vous utilisez cette méthode, il n’est pas possible de transmettre des paires de substitution non valides. Les fonctions XQuery nécessitent une entité de caractère unique pour le caractère de niveau supérieur. Ces fonctions déclenchent une erreur si les entités de caractères pour les paires de substitution sont fournies.
Importez des valeurs externes à l’aide de sql :column ou sql :variable. Lors de l’utilisation de ces méthodes, il reste 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 désormais correctement les paires de substitution UTF-16 dans SQL Server 2012 :
fn :string-length. Toutefois, si une paire de substitution non valide ou partielle est passée en tant qu’argument, le comportement de longueur de chaîne n’est pas défini.
fn :substring.
fn :contains. Toutefois, si une paire de substitutions partielle est passée en tant que valeur, contient peut retourner des résultats inattendus, car il se peut qu'il trouve la paire de substitutions partielle contenue dans une paire de substitutions correctement formée.
fn :concat. Toutefois, si une paire de substitution partielle est passée en tant que valeur, concat peut produire des paires de substitution incorrectes ou des paires de substitution partielles.
Opérateurs de comparaison et clause order by . Les opérateurs de comparaison incluent +, <, >, <=, >=,
eq,lt,gt,le, etge.
Appels de requête distribués à une procédure système
Les appels de requête distribués via OPENQUERY certaines procédures système échouent lorsqu’ils sont appelés d’un serveur SQL Server 2012 à un autre. Cela se produit lorsque le moteur de base de données ne peut pas détecter les métadonnées d’une procédure. Par exemple : SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').
Niveau d’isolation et sp_reset_connection
Le niveau d’isolation des connexions est géré de la manière suivante par les pilotes clients :
Tous les pilotes natifs (SNAC, MDAC, ODBC) définissent le niveau d’isolation (en fonction du paramètre d’application) sur sp_reset_connection.
Pour ADO.NET vous obtiendrez essentiellement un niveau d’isolation aléatoire en fonction de la connexion que vous obtenez à partir du pool (et si l’application utilise un niveau d’isolation différent). Étant donné que ADO.NET pool peut recycler les connexions en interne et en toute transparence, vous ne pouvez pas prédire ce qui sortira du pool.
Pour le pilote JDBC, vous obtenez le même comportement que ADO.NET
L’application doit toujours définir explicitement le niveau d’isolation après l’ouverture de la connexion pour obtenir ce qu’elle souhaite.
La connexion JDBC peut être mise en pool, de sorte que l’application peut obtenir un niveau d’isolation aléatoire et ne pas en savoir plus.
Pour préserver la compatibilité descendante, ce nouveau comportement s’applique uniquement aux clients récents commençant par TDS 7.4.
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 de 110 ou supérieur :
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 pour les 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, autrement dit. http://www.w3.org/2005/xpath-functions Lorsque le niveau de compatibilité est 110 ou supérieur, SQL Server 2012 lie par défaut 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
Modifications majeures dans SQL Server 2008/SQL Server 2008R2
Cette section contient les modifications majeures introduites dans SQL Server 2008. Aucune modification n’a été introduite dans SQL Server 2008 R2.
Classements
| Caractéristique | Descriptif |
|---|---|
| Nouveaux regroupements | SQL Server 2008 introduit de nouveaux classements qui sont en alignement complet avec les classements fournis par Windows Server 2008. Ces 80 nouveaux classements ont amélioré la précision linguistique et sont indiqués par les références de version *_100. Si vous choisissez un nouveau classement pour votre serveur ou base de données, sachez que le classement peut ne pas être reconnu par les clients ayant des pilotes clients plus anciens. Les classements non reconnus peuvent entraîner le retour d’erreurs et l’échec de l’application. Tenez compte des solutions suivantes : Mettez à niveau le système d’exploitation client afin que les classements système sous-jacents soient mis à jour. Si votre client dispose d’un logiciel client de base de données installé, envisagez d’appliquer une mise à jour de service au logiciel client de base de données. Choisissez un classement existant qui correspond à une page de code côté client. |
CLR (Common Language Runtime)
| Caractéristique | Descriptif |
|---|---|
| Assemblages CLR | Lorsqu’une base de données est mise à niveau vers SQL Server 2008, l’assembly Microsoft.SqlServer.Types pour prendre en charge les nouveaux types de données est automatiquement installé. Les règles Advisor de mise à niveau détectent tout type d’utilisateur ou d'assemblées ayant des noms en conflit. Le Conseiller de mise à niveau conseillera de renommer tout assembly en conflit, et soit de renommer tout type en conflit, soit d'utiliser des noms en deux parties dans le code pour faire référence à ce type d'utilisateur déjà existant.Si une mise à niveau de base de données détecte un assembly utilisateur avec un nom en conflit, il renomme automatiquement cet assembly et place 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. |
| Assemblies CLR | SQL Server 2008 installe .NET Framework 3.5 SP1, qui met à jour les bibliothèques dans global Assembly Cache (GAC). Si vous n’avez pas de bibliothèques prises en charge 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 des bibliothèques dans le GAC ne met pas à jour les assemblys à l’intérieur de SQL Server. Si un assembly existe à la fois dans une base de données SQL Server et dans le GAC, les deux copies de l’assembly doivent correspondre exactement. S’ils ne correspondent pas, 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, mettez à jour ou servicez la copie de l’assembly dans vos bases de données SQL Server avec l’instruction ALTER ASSEMBLY. Pour plus d’informations, consultez l’article de la Base de connaissances 949080. Pour détecter si vous utilisez une bibliothèque .NET Framework non prise en charge dans votre application, exécutez la requête suivante dans votre base de données. SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%'; |
| CLR Routines | L’utilisation de l’emprunt d’identité dans les fonctions CLR définies par l’utilisateur, les agrégats définis par l’utilisateur ou les types définis par l’utilisateur (UDT) peut conduire à l’échec de votre application avec l’erreur 6522 après la migration vers SQL Server 2008. Les scénarios suivants réussissent dans SQL Server 2005, mais échouent dans SQL Server 2008. Les résolutions sont fournies pour chaque scénario. Une fonction CLR définie par l'utilisateur, un agrégat défini par l'utilisateur ou une méthode UDT qui utilise l'emprunt d'identité a un paramètre de type nvarchar(max), varchar(max), varbinary(max), ntext, text, image ou un UDT volumineux, et n'a pas l'attribut DataAccessKind.Read sur la méthode. Pour résoudre ce problème, ajoutez l’attribut DataAccessKind.Read à la méthode, recompilez l’assembly et redéployez la routine et l’assembly.Fonction table CLR qui a une méthode Init qui effectue l'imitation d'identité. Pour résoudre ce problème, ajoutez l’attribut DataAccessKind.Read à la méthode, recompilez l’assembly et redéployez la routine et l’assembly. Fonction table CLR qui a une méthode FillRow qui effectue l’emprunt d’identité. Pour résoudre ce problème, supprimez l'emprunt d'identité de la méthode FillRow. N’accédez pas aux ressources externes à l’aide de la méthode FillRow . Au lieu de cela, accédez aux ressources externes à partir de la méthode Init . |
Vues de gestion dynamique
| Afficher | Descriptif |
|---|---|
| sys.dm_os_sys_info | Les colonnes cpu_ticks_in_ms et sqlserver_start_time_cpu_ticks ont été supprimées. |
| sys.dm_exec_query_resource_semaphoressys.dm_exec_query_memory_grants | La colonne resource_semaphore_id n’est pas un ID unique dans SQL Server 2008. Cette modification peut affecter la résolution des problèmes d’exécution des requêtes. Pour plus d’informations, consultez sys.dm_exec_query_resource_semaphores (Transact-SQL). |
Erreurs et événements
| Caractéristique | Descriptif |
|---|---|
| Erreurs de connexion | Dans SQL Server 2005, l’erreur 18452 est retournée lorsqu’une connexion SQL est utilisée pour se connecter à 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
| Caractéristique | Descriptif |
|---|---|
| Schéma XML du plan d'exécution | Un nouvel élément SeekPredicateNew est ajouté au schéma XML Showplan, et la séquence xsd englobante (SqlPredicatesType) est convertie en <élément xsd :choice> . Au lieu d’un ou plusieurs éléments SeekPredicate , un ou plusieurs éléments SeekPredicateNew peuvent maintenant apparaître dans le code XML showplan. Les deux éléments s’excluent mutuellement. SeekPredicate est conservé dans le schéma XML Showplan pour la compatibilité descendante ; Toutefois, les plans de requête 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. Réécrire l’application pour attendre l’élément SeekPredicate ou SeekPredicateNew dans ce nœud. Pour plus d’informations, consultez . |
| Schéma XML de plan d'affichage | Un nouvel attribut IndexKind est ajouté au type complexe ObjectType dans le schéma Showplan XML. Les applications qui valident strictement les plans SQL Server par rapport au schéma SQL Server 2005 échouent. |
Transact-SQL
| Caractéristique | Descriptif |
|---|---|
| événement DDL "ALTER_AUTHORIZATION_DATABASE" | Dans SQL Server 2005, lorsque l’événement DDL ALTER_AUTHORIZATION_DATABASE se déclenche, la valeur 'object' est retournée dans l’élément ObjectType du xml EVENTDATA pour cet événement lorsque le type d’entité de l’opération sécurisable dans l’opération DDL (Data Definition Language) est un objet. Dans SQL Server 2008, le type réel (par exemple, « table » ou « fonction ») est retourné. |
| CONVERTIR | Si un style non valide est passé à la fonction CONVERT, une erreur est retournée lorsque le type de conversion est de binaire à caractère ou de caractère à binaire. Dans les versions antérieures de SQL Server, le style non valide utilise le style par défaut pour les conversions binaires en caractères et caractères en binaire. |
| GRANT/DENY/REVOKE EXECUTE sur les assemblies | L’autorisation EXECUTE ne peut pas être accordée, refusée ou révoquée sur les assemblies. Cette autorisation n’a aucun impact et provoque maintenant une erreur. Accordez, refusez ou révoquez l’autorisation EXECUTE sur les procédures stockées ou les fonctions qui font référence à la méthode d'assemblage. |
| GRANT/DENY/REVOKE permissions sur les types de système | Les autorisations ne peuvent pas être accordées, refusées ou révoquées aux types système. Dans les versions antérieures de SQL Server, ces instructions réussissent, mais n’ont aucun effet. Dans SQL Server 2008, une erreur est retournée. |
| REGROUPER PAR | La clause GROUP BY ne peut pas contenir de sous-requête dans une expression utilisée pour le groupe par liste. Dans les versions antérieures de SQL Server, cela a été 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 un comportement non déterministe, la clause OUTPUT ne peut pas référencer une colonne provenant d'une vue ou d'une fonction retournant une table en ligne lorsque cette colonne est définie par l'une des méthodes suivantes : Sous-requête. Fonction définie par l’utilisateur qui effectue un accès aux données utilisateur ou système, ou qui est supposée effectuer ce type d’accès. Colonne calculée qui contient dans sa définition une fonction définie par l’utilisateur qui effectue un accès aux données utilisateur ou système. Quand SQL Server détecte une telle colonne dans la clause OUTPUT, l’erreur 4186 est déclenchée. Pour plus d’informations, consultez MSSQLSERVER_4186. |
| Clause OUTPUT INTO | La table cible de la clause OUTPUT INTO ne peut pas avoir de déclencheurs activés. |
| Option de pré-calcul de classement au niveau serveur | Cette option n’est pas prise en charge dans SQL Server 2008. Modifiez les applications qui utilisent actuellement cette fonctionnalité dès que possible. |
| Indicateur de table READPAST | Vous ne pouvez pas spécifier l’indicateur READPAST sous Isolation d’instantané. L’indicateur READPAST est ignoré lorsque l’option de base de données READ_COMMITED_SNAPSHOT ou ALLOW_SNAPSHOT_ISOLATION est définie sur ON. Toutefois, si vous combinez l’indicateur READPAST avec READCOMMITTEDLOCK, le comportement READPAST est identique à l’indicateur READCOMMITTED bloquant. |
| sp_helpuser | Les noms de colonnes suivants retournés dans le jeu de résultats de la procédure stockée sp_helpuser ont changé : GroupName est maintenant : Nom du rôle Group_name est maintenant : Role_name Group_id est maintenant : Identifiant_de_rôle Users_in_group est maintenant : Utilisateurs_dans_rôle |
| 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 lorsque la page est écrite sur le disque. Les fichiers de base de données et les fichiers journaux sont chiffrés. Les applications tierces qui contournent le mécanisme SQL Server standard pour accéder aux pages (par exemple, en analysant directement les données ou les fichiers journaux) échouent lorsqu’une base de données utilise TDE, car les données sont chiffrées dans les fichiers. Ces applications peuvent tirer parti de l’API de chiffrement de fenêtre pour développer une solution pour déchiffrer les données en dehors de SQL Server. |
XQuery
| Caractéristique | Descriptif |
|---|---|
| Prise en charge date et heure | Dans SQL Server 2005, les types xs:timede données , xs:dateet xs:dateTime ne prennent pas en charge le fuseau horaire. Les données de fuseau horaire sont mappées au fuseau horaire UTC. SQL Server 2008 fournit un comportement conforme standard, ce qui entraîne les modifications suivantes :Les valeurs sans fuseau horaire sont validées. Le fuseau horaire fourni ou l’absence d’un fuseau horaire est 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. Remarque : Modifiez les applications et les 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 commençant par un signe deux-points (' :') sont autorisées. Par exemple, l’instruction suivante contient un test de nom (CTR02) dans l’expression de chemin commençant par 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 n’est pas autorisée, car elle n’est pas conforme aux normes XML. L’erreur 9341 est retournée. Supprimez le deux-points au début ou spécifiez un préfixe pour le nom test — par exemple, (n$/CTR02) ou (n$/p1 :CTR02). |
Connexion
| Caractéristique | Descriptif |
|---|---|
| Connexion à partir de SQL Server Native Client à l’aide de SSL | Lors de la connexion avec SQL Server Native Client, les applications qui utilisent « SERVER=shortname ; FORCE ENCRYPTION=true » avec certificat dont les sujets spécifient des noms de domaine complets (FQDN) se sont connectés par le passé en raison d’une validation détendue. SQL Server 2008 R2 améliore la sécurité en appliquant des sujets de nom de domaine complet pour les certificats. Les applications qui s’appuient sur la validation assouplie doivent effectuer l’une des actions suivantes : Utilisez le nom de domaine complet dans la chaîne de connexion. -Cette option ne nécessite pas de recompiler l’application si le mot clé SERVER de la chaîne de connexion est configuré en dehors de l’application. -Cette option ne fonctionne pas pour les applications qui ont leurs chaînes de connexion codées en dur. -Cette option ne fonctionne pas pour les applications qui utilisent la mise en miroir de bases de données, car le serveur mis en miroir répond avec un nom simple. |
| Ajoutez un alias pour que le nom court corresponde au FQDN. -Cette option fonctionne même pour les applications qui ont leurs chaînes de connexion codées en dur. -Cette option ne fonctionne pas pour les applications qui utilisent la mise en miroir de bases de données, car les fournisseurs ne recherchent pas d’alias pour les noms de partenaires de basculement reçus. |
|
| Faites émettre un certificat pour le nom court. -Cette option fonctionne pour toutes les applications. |
Modifications importantes dans SQL Server 2005
Nous cumulons et conservons la documentation pour les anciennes versions de Microsoft SQL Server dans un ensemble de pages web d’archivage . Les pages web archivées ne sont pas traitées par les moteurs de recherche, tels que Bing.com et les Google.com. Mais vous pouvez voir ces archives à l'adresse de la version précédente de nos documents précédents/ :
Ces archives incluent la documentation pour au moins les versions antérieures suivantes :
- SQL Server 2014
- SQL Server 2012
- SQL Server 2008 R2
- SQL Server 2008
- SQL Server 2005
La documentation SQL Server 2014 a été archivée et n’est plus traitée par les moteurs de recherche. Les articles de l'année 2014 sont désormais déclarés avec NOINDEX et NOFOLLOW.
La dernière version de SQL Server, ainsi que d’autres versions récentes, est documentée ici.
Voir aussi
Fonctionnalités dépréciées du moteur de base de données dans SQL Server 2014
Modifications du comportement des fonctionnalités 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
Compatibilité descendante du moteur de base de données SQL Server
Niveau de compatibilité ALTER DATABASE (Transact-SQL)
Modifications majeures des outils de gestion dans SQL Server 2014