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

Cette rubrique décrit les changements cassants dans le moteur de base de données SQL Server 2014 et les 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 Use Upgrade Advisor to Prepare for Upgrades.

Modifications avec rupture dans SQL Server 2014

Aucun nouveau problème.

Changements essentiels apportés à SQL Server 2012

Transact-SQL

Fonctionnalité 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 et que la table ou la colonne a un alias en tant que VALEUR, et si la norme AS ANSI est omise, l’instruction résultante 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.
WITHIN (mot clé réservé) WITHIN est maintenant un mot clé réservé. Les références aux objets ou aux colonnes nommés « within » échouent. Renommez l'objet ou la colonne ou délimitez le nom par des crochets ou des 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 time les types de données 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.

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 aux formats suivants échoue maintenant 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 systématiquement 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 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 de produit installée du 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é.

En fonction de l’édition Enterprise installée, cela peut retourner « Êdition Entreprise » ou « Êdition Entreprise : licences basées sur les cœurs ». Les éditions Enterprise 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.
CREATE LOGIN 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 0 ou 1. Tous les autres styles de conversion retournent l'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);

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 :

single_pages_kb est maintenant :
pages_kb

multi_pages_kb
est maintenant : pages_in_use_kb
sys.dm_os_memory_cache_entries La colonne pages_allocated_count colonne a été renommée pages_kb.
sys.dm_os_memory_clerks Le multi_pages_kb de colonne a été supprimé.

La colonne single_pages_kb colonne 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 :
foreign_committed_kb
sys.dm_os_memory_objects Les colonnes suivantes ont été renommées.

pages_allocated_count est maintenant :
pages_in_bytes

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 :
physical_memory_kb

bpool_commit_target est maintenant :
committed_target_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.

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’assemblyMicrosoft.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 un ordinateur sur lequel seul SQL Server 2014 est installé, l’application échoue, car la version 10.0 référencée 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 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 GetSqlBytes mé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 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 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 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. Considérez les 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 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 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 substitution partielle est passée en tant que valeur, les contient peuvent retourner des résultats inattendus, car il peut trouver la paire de substitution partielle contenue dans une paire de substituts bien 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>, , gtltle, et .ge>

Appels de requête distribuée à 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'isolement et sp_reset_connection

Le niveau d'isolement pour les connexions est géré par les pilotes clients de la manière suivante :

  • Tous les pilotes natifs (SNAC, MDAC, ODBC) définissent le niveau d'isolement (selon les paramètres de l'application) lors de l'exécution de sp_reset_connection.

  • Pour ADO.NET, vous obtiendrez essentiellement un niveau d'isolement aléatoire en fonction de la connexion obtenue à partir du pool (si l'application utilise un niveau d'isolement différent). Étant donné que le pool ADO.NET peut recycler les connexions en interne de façon transparente, vous ne pouvez pas prédire quelle connexion vous obtiendrez du pool.

  • Avec le pilote JDBC, le comportement est le même que pour ADO.NET

    L'application doit toujours définir explicitement le niveau d'isolement après l'ouverture de la connexion pour obtenir ce qu'elle veut.

    Comme la connexion JDBC peut être regroupée dans un pool, il est possible que l'application obtienne un niveau d'isolement aléatoire sans le savoir.

Pour maintenir la compatibilité descendante, ce nouveau comportement concerne uniquement les clients récents (à partir de TDS 7.4).

Backward Compatibility

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, http://www.w3.org/2005/xpath-functionsc’est-à-dire . Lorsque le niveau de compatibilité est égal ou supérieur à 110, 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 avec rupture dans SQL Server 2008/SQL Server 2008 R2

Cette section contient les modifications cassants introduites dans SQL Server 2008. Aucune modification n’a été introduite dans SQL Server 2008 R2.

Classements

Fonctionnalité Description
Nouveaux classements SQL Server 2008 introduit de nouveaux classements qui sont entièrement alignés sur 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.

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 pour prendre en charge les 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 Global Assembly Cache (GAC). Si vous avez des bibliothèques non 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 SQL Server intégration CLR. Pour plus d’informations, consultez Bibliothèques .NET Framework prises en charge.

Après la mise à niveau de votre base de données, traitez ou mettez à niveau la copie de l’assembly à l’intérieur de vos SQL Server bases de données 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 L’utilisation de l’emprunt d’identité à l’intérieur de fonctions définies par l’utilisateur CLR, d’agrégats définis par l’utilisateur ou de types définis par l’utilisateur (UDT) peut entraîner l’échec de votre application avec l’erreur 6522 après la 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.

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 grand UDT et n’a pas l’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.

Fonction table CLR qui a une méthode Init qui effectue l’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.

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

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

Fonctionnalité Description
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.

Showplan

Fonctionnalité Description
Schéma du plan d'exécution XML 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 xml Showplan. Les deux éléments s'excluent mutuellement. SeekPredicate est conservé dans le schéma XML Showplan à des fins de 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 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 qu’elle attende l’élément SeekPredicate ou SeekPredicateNew dans ce nœud. Pour plus d'informations, consultez .
Schéma du plan d'exécution XML Un nouvel attribut IndexKind est ajouté au type complexe ObjectType dans le schéma XML Showplan. Les applications qui valident strictement SQL Server plans par rapport au schéma SQL Server 2005 échouent.

Transact-SQL

Fonctionnalité Description
É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 le 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 de type binaire à caractère et de 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 réussissent, 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.



Quand 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.
READPAST, indicateur de table 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 retournés dans le jeu de résultats de la procédure stockée sp_helpuser ont changé :

GroupName est maintenant :
RoleName

Group_name est maintenant :
Role_name

Group_id est maintenant :
Role_id

Users_in_group est maintenant :
Users_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 contournent le mécanisme de 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 de déchiffrement des données en dehors de SQL Server.

XQuery

Fonctionnalité Description
Prise en charge de la date et de l'heure Dans SQL Server 2005, les types de xs:timedonné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 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.



Remarque : modifiez les applications et les expressions XQuery pour tenir compte des nouvelles valeurs de type.
Expressions XQuery et XPath Dans SQL Server 2005, les étapes d’une expression XQuery ou XPath commençant par 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 interdite, 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

Fonctionnalité Description
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 que les noms de domaine complets (FQDN) se sont connectés dans 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 nécessite pas de recompiler l’application si le serveur mot clé de la chaîne de connexion est configuré en dehors 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, car le serveur mis en miroir répond avec un nom simple.
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, car les fournisseurs ne recherchent pas d’alias pour les noms de partenaires de basculement reçus.
Faire en sorte qu'un certificat soit émis pour le nom court.

-Cette option fonctionne pour toutes les applications.

Changements essentiels apportés à SQL Server 2005

Nous accumulons et conservons la documentation pour les versions très anciennes de Microsoft SQL Server dans un ensemble de pages web d’archive. Les pages web archivées ne sont pas traitées par les moteurs de recherche tels que Bing.com et Google.com. Mais vous pouvez voir ces archives à l’adresse de notre docs versions précédentes/ :

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

SQL Server documentation 2014 a été archivée et n’est plus traitée par les moteurs de recherche. Les articles de 2014 se déclarent maintenant 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 du moteur de base de données déconseillées dans SQL Server 2014
Changements de comportement des fonctionnalités du moteur de base de données de SQL Server 2014
Discontinued Database Engine Functionality in SQL Server 2014 (Fonctionnalités du moteur de base de données non disponibles dans SQL Server 2014)
Compatibilité descendante du moteur de base de données SQL Server
Niveau de compatibilité ALTER DATABASE (Transact-SQL)
Dernières modifications apportées aux fonctionnalités des outils d'administration dans SQL Server 2014