MSSQLSERVER_6522MSSQLSERVER_6522

S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions)

DétailsDetails

AttributAttribute ValeurValue
Nom du produitProduct Name SQL ServerSQL Server
ID de l’événementEvent ID 65226522
Source de l’événementEvent Source MSSQLSERVERMSSQLSERVER
ComposantComponent SQLEngineSQLEngine
Nom symboliqueSymbolic Name SQLCLR_UDF_EXEC_FAILEDSQLCLR_UDF_EXEC_FAILED
Texte du messageMessage Text Une erreur .NET Framework s’est produite au cours de l’exécution de la routine ou de la fonction d’agrégation définie par l’utilisateur "%.*ls" : %ls.A .NET Framework error occurred during execution of user defined routine or aggregate "%.*ls": %ls.

ExplicationExplanation

Examinez les scénarios suivants.Consider the following scenarios.

Scénario 1Scenario 1

Vous créez une routine de Common Language Runtime (CLR) qui fait référence à un assembly Microsoft .NET Framework.You create a common language runtime (CLR) routine that references a Microsoft .NET Framework assembly. L’assembly .NET Framework n’est pas documenté dans 922672.The .NET Framework assembly is not documented in 922672. Ensuite, vous installez le .NET Framework 3.5 ou un correctif logiciel basé sur .NET Framework 2.0.Then, you install the .NET Framework 3.5 or a .NET Framework 2.0-based hotfix.

Scénario 2Scenario 2

Vous créez un assembly, puis vous l’inscrivez dans une base de données SQL ServerSQL Server.You create an assembly, and then you register the assembly in a SQL ServerSQL Server database. Ensuite, vous installez une autre version de l’assembly dans le Global Assembly Cache (GAC).Then, you install a different version of the assembly in the Global Assembly Cache (GAC).

Lorsque vous exécutez la routine CLR ou utilisez l’assembly de l’un de ces scénarios dans SQL ServerSQL Server, vous recevez un message d’erreur semblable à ce qui suit :When you execute the CLR routine or use the assembly from either of these scenarios in SQL ServerSQL Server, you receive an error message that resembles the following:

Serveur : Message 6522, niveau 16, état 2, ligne 1Server: Msg 6522, Level 16, State 2, Line 1
Une erreur .NET Framework s’est produite au cours de l’exécution de la routine ou de la fonction d’agrégation définie par l’utilisateur 'getsid’ :A .NET Framework error occurred during execution of user defined routine or aggregate 'getsid':

System.IO.FileLoadException : Impossible de charger le fichier ou l’assembly 'System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' ou une de ses dépendances.System.IO.FileLoadException: Could not load file or assembly 'System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. L’assembly dans le magasin hôte a une signature différente de celle de l’assembly dans le GAC.Assembly in host store has a different signature than assembly in GAC. (Exception de HRESULT : 0x80131050)(Exception from HRESULT: 0x80131050)

Cause possiblePossible cause

Lorsque le CLR charge un assembly, il vérifie que le même assembly se trouve dans le GAC.When the CLR loads an assembly, the CLR verifies that the same assembly is in the GAC. Si le même assembly se trouve dans le GAC, le CLR vérifie que les ID de version de module (MVID) de ces assemblys correspondent.If the same assembly is in the GAC, the CLR verifies that the Module Version IDs (MVIDs) of these assemblies match. Si les MVID de ces assemblys ne correspondent pas, vous recevez le message d’erreur que la section Explication mentionne.If the MVIDs of these assemblies do not match, you receive the error message that the Explanation section mentions.

Lorsqu’un assembly est recompilé, le MVID de l’assembly change.When an assembly is recompiled, the MVID of the assembly changes. Par conséquent, si vous mettez à jour le .NET Framework, les assemblys .NET Framework ont des MVID différents, car ces assemblys sont recompilés.Therefore, if you update the .NET Framework, the .NET Framework assemblies have different MVIDs because those assemblies are recompiled. En outre, si vous mettez à jour votre propre assembly, l’assembly est recompilé.Additionally, if you update your own assembly, the assembly is recompiled. Par conséquent, l’assembly a également un MVID différent.Therefore, the assembly also has a different MVID.

Action requiseUser action

Action 1Action 1

Pour contourner le scénario 1 dans la section Explication, vous devez mettre à jour manuellement les assemblys .NET Framework dans SQL ServerSQL Server.To work around scenario 1 in the Explanation section, you must manually update the .NET Framework assemblies in SQL ServerSQL Server. Pour ce faire, utilisez l’instruction ALTER ASSEMBLY pour pointer vers la nouvelle version de l’assembly .NET Framework dans le dossier suivant :To do this, use the ALTER ASSEMBLY statement to point to the new version of the .NET Framework assembly in the following folder:

%Windir%\Microsoft.NET\Framework\Version

Notes

Version représente la version de .NET Framework que vous avez installée ou mise à jour.Version represents the version of the .NET Framework that you installed or updated.

Action 2Action 2

Pour contourner le scénario 2 de la section Explication, utilisez l’instruction ALTER ASSEMBLY pour mettre à jour l’assembly dans la base de données.To work around scenario 2 in the Explanation section, use the ALTER ASSEMBLY statement to update the assembly in the database.

Si le problème persiste, supprimez l’assembly de la base de données, puis enregistrez la nouvelle version de l’assembly dans la base de données.If the problem still exists after you do this, drop the assembly from the database, and then register the new version of the assembly in the database.

Informations complémentairesMore information

Nous vous déconseillons d’utiliser des assemblys .NET Framework qui ne sont pas documentés dans Stratégie de prise en charge des assemblys .NET Framework non testés dans l’environnement SQL Server hébergé par le CLR.We do not recommend that you use .NET Framework assemblies that are not documented in Support policy for untested .NET Framework assemblies in the SQL Server CLR-hosted environment. Elle répertorie les assemblys qui sont testés dans l’environnement SQL ServerSQL Server hébergé par le CLR.It lists the assemblies that are tested in the SQL ServerSQL Server CLR-hosted environment.

Description des routines CLRDescription of CLR routines

Les routines CLR incluent les objets suivants qui sont implémentés à l’aide de l’intégration de SQL ServerSQL Server avec le CLR .NET Framework :CLR routines include the following objects that are implemented by using SQL ServerSQL Server integration with the .NET Framework CLR:

  • Fonctions scalaires définies par l'utilisateur (fonctions UDF scalaires)Scalar-valued user-defined functions (scalar UDFs)
  • Fonctions table définies par l'utilisateur (TVF)Table-valued user-defined functions (TVFs)
  • Procédures définies par l'utilisateur (UDP)User-defined procedures (UDPs)
  • Déclencheurs définis par l’utilisateurUser-defined triggers
  • Types de données définis par l'utilisateurUser-defined data types
  • Fonctions d'agrégation définies par l'utilisateurUser-defined aggregates

Assemblys à mettre à jour après l’installation de .NET Framework 3.5Assemblies to update after you install the .NET Framework 3.5

Après avoir installé .NET Framework 3.5, vous devez utiliser l’instruction ALTER ASSEMBLY pour mettre à jour les assemblys suivants :After you install the .NET Framework 3.5, you must use the ALTER ASSEMBLY statement to update the following assemblies:

  • Accessibility.dllAccessibility.dll
  • AspNetMMCExt.dllAspNetMMCExt.dll
  • Cscompmgd.dllCscompmgd.dll
  • IEExecRemote.dllIEExecRemote.dll
  • IEHost.dllIEHost.dll
  • IIEHost.dllIIEHost.dll
  • Microsoft.Build.Conversion.dllMicrosoft.Build.Conversion.dll
  • Microsoft.Build.Engine.dllMicrosoft.Build.Engine.dll
  • Microsoft.Build.Framework.dllMicrosoft.Build.Framework.dll
  • Microsoft.Build.Tasks.dllMicrosoft.Build.Tasks.dll
  • Microsoft.Build.Utilities.dllMicrosoft.Build.Utilities.dll
  • Microsoft.CompactFramework.Build.Tasks.dllMicrosoft.CompactFramework.Build.Tasks.dll
  • Microsoft.JScript.dllMicrosoft.JScript.dll
  • Microsoft.VisualBasic.Vsa.dllMicrosoft.VisualBasic.Vsa.dll
  • Microsoft.Vsa.dllMicrosoft.Vsa.dll
  • Microsoft.Vsa.Vb.CodeDOMProcessor.dllMicrosoft.Vsa.Vb.CodeDOMProcessor.dll
  • Microsoft_VsaVb.dllMicrosoft_VsaVb.dll
  • Sysglobl.dllSysglobl.dll
  • System.Configuration.Install.dllSystem.Configuration.Install.dll
  • System.Design.dllSystem.Design.dll
  • System.DirectoryServices.dllSystem.DirectoryServices.dll
  • System.DirectoryServices.Protocols.dllSystem.DirectoryServices.Protocols.dll
  • System.Drawing.dllSystem.Drawing.dll
  • System.Drawing.Design.dllSystem.Drawing.Design.dll
  • System.EnterpriseServices.dllSystem.EnterpriseServices.dll
  • System.Management.dllSystem.Management.dll
  • System.Messaging.dllSystem.Messaging.dll
  • System.Runtime.Serialization.Formatters.Soap.dllSystem.Runtime.Serialization.Formatters.Soap.dll
  • System.ServiceProcess.dllSystem.ServiceProcess.dll
  • System.Web.dllSystem.Web.dll
  • System.Web.Mobile.dllSystem.Web.Mobile.dll
  • System.Web.RegularExpressions.dllSystem.Web.RegularExpressions.dll

Ces assemblys se trouvent dans le dossier suivant :These assemblies are in the following folder:

%Windir%\Microsoft.NET\Framework\v2.0.50727

Comment conserver les données des types de données définis par l’utilisateur après la suppression d’un assemblyHow to preserve the data from user-defined data types after you drop an assembly

Si vous supprimez un assembly qu’un type de données défini par l’utilisateur de SQL ServerSQL Server utilise, vous pouvez utiliser l’une des méthodes suivantes pour conserver les données.If you drop an assembly that a user-defined data type from SQL ServerSQL Server uses, you can use one of the following methods to preserve the data.

Supposons le scénario suivant :Assume that the following is the scenario:

  • Vous créez un assembly dont le nom est MyAssembly.dll.You create an assembly whose name is MyAssembly.dll.
  • L’assembly MyAssembly référence l’assembly System.DirectoryServices.dll.The MyAssembly assembly references the System.DirectoryServices.dll assembly.
  • Vous avez un type de données défini par l’utilisateur dont le nom est MyDateTime.You have a user-defined data type whose name is MyDateTime.
  • Le type de données MyDateTime utilise l’assembly MyAssembly.dll.The MyDateTime data type uses the MyAssembly.dll assembly.
  • Vous créez une table dont le nom est MyTable.You create a table whose name is MyTable.
  • La table MyTable contient des données du type de données MyDateTime.The MyTable table contains the data of the MyDateTime data type.

Méthode 1 : Utiliser l’utilitaire bcp.exeMethod 1: Use the bcp.exe utility

  1. Utilisez l’utilitaire bcp.exe conjointement avec l’option -n pour copier les données de la table MyTable dans un fichier.Use the Bcp.exe utility together with the -n switch to copy the data from the MyTable table into a file. Par exemple, exécutez la commande suivante à partir d’une invite de commandes :For example, run the following command at a command prompt:

    bcp MyDatabase.dbo.MyTable out C:\MyFile.bcp -n -SSQLServerName -T
    
  2. Dans SQL ServerSQL Server Management Studio, procédez comme suit :In SQL ServerSQL Server Management Studio, follow these steps:

    1. Supprimez la table MyTable.Drop the MyTable table.
    2. Supprimez le type de données MyDateTime.Drop the MyDateTime data type.
    3. Supprimez l’assembly System.DirectoryServices.dll.Drop the System.DirectoryServices.dll assembly.
    4. Supprimez l’assembly MyAssembly.Drop the MyAssembly assembly.
  3. Dans SQL ServerSQL Server Management Studio, procédez comme suit :In SQL ServerSQL Server Management Studio, follow these steps:

    1. Inscrire l’assembly System.DirectoryServices.dll.Register the System.DirectoryServices.dll assembly.
    2. Inscrivez l’assembly MyAssembly.Register the MyAssembly assembly.
    3. Créez le type de données MyDateTime.Create the MyDateTime data type.
    4. Créez une table qui a la même structure de table que la table MyTable.Create a new table that has the same table structure as the MyTable table.
  4. Utilisez l’utilitaire bcp.exe conjointement avec l’option -n pour importer les données du fichier dans la table MyTable.Use the Bcp.exe utility together with the -n switch to import the data from the file into the MyTable table. Par exemple, exécutez la commande suivante à partir d’une invite de commandes :For example, run the following command at a command prompt:

    bcp MyDatabase.dbo.MyTable in C:\MyFile.bcp -n -SSQLServerName -T
    

Méthode 2 : Utilisez l’instruction INSERT... Instruction SELECTMethod 2: Use the INSERT ... SELECT statement

Supposons que le type de données MyDateTime occupe 9 octets dans le stockage.Assume that the MyDateTime data type occupies 9 bytes in storage.

  1. Dans SQL ServerSQL Server Management Studio, créez une table qui contient une colonne du type de données VARBINARY(9) en exécutant l’instruction suivante :In SQL ServerSQL Server Management Studio, create a new table that contains a column of the VARBINARY(9) data type by running the following statement:

    CREATE TABLE TempTable (c1 VARBINARY(9));
    
  2. Exécutez l’exemple d’instruction INSERT... Instruction SELECT pour remplir la table tentant TempTable :Run the following INSERT ... SELECT statement to populate the TempTable table:

    INSERT INTO TempTable SELECT CAST(c1 as VARBINARY(9)) FROM MyTable;
    
  3. Dans SQL ServerSQL Server Management Studio, procédez comme suit :In SQL ServerSQL Server Management Studio, follow these steps:

    1. Supprimez la table MyTable.Drop the MyTable table.
    2. Supprimez le type de données MyDateTime.Drop the MyDateTime data type.
    3. Supprimez l’assembly System.DirectoryServices.dll.Drop the System.DirectoryServices.dll assembly.
    4. Supprimez l’assembly MyAssembly.Drop the MyAssembly assembly.
  4. Dans SQL ServerSQL Server Management Studio, procédez comme suit :In SQL ServerSQL Server Management Studio, follow these steps:

    1. Inscrivez l’assembly System.DirectoryServices.dll.Register the System.DirectoryServices.dll assembly.
    2. Inscrivez l’assembly MyAssembly.Register the MyAssembly assembly.
    3. Créez le type de données MyDateTime.Create the MyDateTime data type.
    4. Créez une table qui a la même structure de table que la table MyTable.Create a new table that has the same table structure as the MyTable table.
  5. Exécutez l’exemple d’instruction INSERT... Instruction SELECT pour remplir la table MyTable :Run the following INSERT ... SELECT statement to populate the MyTable table:

    INSERT INTO MyTable SELECT c1 FROM TempTable;
    

RéférencesReferences