MSSQLSERVER_6522
Se aplica a: SQL Server
Detalles
Attribute | Valor |
---|---|
Nombre del producto | SQL Server |
Id. de evento | 6522 |
Origen de eventos | MSSQLSERVER |
Componente | SQLEngine |
Nombre simbólico | SQLCLR_UDF_EXEC_FAILED |
Texto del mensaje | Error de .NET Framework durante la ejecución de la rutina o agregado definido por el usuario "%.*ls": %ls. |
Explicación
Considere los siguientes escenarios.
Escenario 1
Cree una rutina de Common Language Runtime (CLR) que haga referencia a un ensamblado de Microsoft .NET Framework. El ensamblado de .NET Framework no se documenta en 922672. A continuación, instale la corrección basada en .NET Framework 3.5 o en .NET Framework 2.0.
Escenario 2
Cree un ensamblado y, a continuación, registre el ensamblado en una base de datos de SQL Server. A continuación, instale una versión diferente del ensamblado en la caché global de ensamblados (GAC).
Al ejecutar la rutina CLR o usar el ensamblado desde cualquiera de estos escenarios en SQL Server, recibirá un mensaje de error similar al siguiente:
Servidor: msg 6522, nivel 16, estado 2, línea 1
Error de .NET Framework durante la ejecución de la rutina o agregado definido por el usuario "getsid":System.IO.FileLoadException: no se pudo cargar el archivo o ensamblado 'System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' o una de sus dependencias. El ensamblado del almacén de host tiene una signatura diferente a la del ensamblado de GAC. (Excepción de HRESULT: 0x80131050)
Causa posible
Cuando CLR carga un ensamblado, CLR comprueba que el mismo ensamblado se encuentra en la GAC. Si el mismo ensamblado se encuentra en la GAC, CLR comprueba que los identificadores de versión del módulo (MVID) de estos ensamblados coinciden. Si los MVID de estos ensamblados no coinciden, recibirá el mensaje de error que se menciona en la sección Explicación.
Cuando se vuelve a compilar un ensamblado, cambia el MVID del mismo. Por lo tanto, si actualiza el .NET Framework, los ensamblados de .NET Framework tienen MVID diferentes porque esos ensamblados se vuelven a compilar. Además, si actualiza su propio ensamblado, este se volverá a compilar. Por lo tanto, el ensamblado también tiene un MVID diferente.
Acción del usuario
Acción 1
Para solucionar el escenario 1 en la sección Explicación , debe actualizar manualmente los ensamblados de .NET Framework en SQL Server. Para ello, use la instrucción ALTER ASSEMBLY
de modo que apunte a la nueva versión del ensamblado de .NET Framework en la siguiente carpeta:
%Windir%\Microsoft.NET\Framework\Version
Nota:
Versión representa la versión de .NET Framework que instaló o actualizó.
Acción 2
Para solucionar el escenario 2 de la sección Explicación, utilice la instrucción ALTER ASSEMBLY
para actualizar el ensamblado en la base de datos.
Si el problema sigue existiendo después de hacerlo, coloque el ensamblado de la base de datos y, a continuación, registre la nueva versión del ensamblado en la base de datos.
Más información
No se recomienda usar ensamblados de .NET Framework que no estén documentados en Directiva de soporte técnico para los ensamblados de .NET Framework que no se hayan probado en el entorno alojado en CLR de SQL Server. Enumera los ensamblados que se prueban en el entorno hospedado en CLR de SQL Server.
Descripción de las rutinas CLR
Las rutinas clR incluyen los siguientes objetos que se implementan mediante la integración de SQL Server con CLR de .NET Framework:
- Funciones definidas por el usuario con valores escalares (UDF escalares)
- Funciones definidas por el usuario con valores de tabla (TVF)
- Procedimientos definidos por el usuario (UDP)
- Desencadenadores definidos por el usuario
- Tipos de datos definidos por el usuario
- Agregados definidos por el usuario
Ensamblados que se van a actualizar después de instalar .NET Framework 3.5
Después de instalar .NET Framework 3.5, debe usar la instrucción ALTER ASSEMBLY para actualizar los siguientes ensamblados:
- Accessibility.dll
- AspNetMMCExt.dll
- Cscompmgd.dll
- IEExecRemote.dll
- IEHost.dll
- IIEHost.dll
- Microsoft.Build.Conversion.dll
- Microsoft.Build.Engine.dll
- Microsoft.Build.Framework.dll
- Microsoft.Build.Tasks.dll
- Microsoft.Build.Utilities.dll
- Microsoft.CompactFramework.Build.Tasks.dll
- Microsoft.JScript.dll
- Microsoft.VisualBasic.Vsa.dll
- Microsoft.Vsa.dll
- Microsoft.Vsa.Vb.CodeDOMProcessor.dll
- Microsoft_VsaVb.dll
- Sysglobl.dll
- System.Configuration.Install.dll
- System.Design.dll
- System.DirectoryServices.dll
- System.DirectoryServices.Protocols.dll
- System.Drawing.dll
- System.Drawing.Design.dll
- System.EnterpriseServices.dll
- System.Management.dll
- System.Messaging.dll
- System.Runtime.Serialization.Formatters.Soap.dll
- System.ServiceProcess.dll
- System.Web.dll
- System.Web.Mobile.dll
- System.Web.RegularExpressions.dll
Estos ensamblados se encuentran en la siguiente carpeta:
%Windir%\Microsoft.NET\Framework\v2.0.50727
Cómo conservar los datos de los tipos de datos definidos por el usuario después de colocar un ensamblado
Si quita un ensamblado que usa un tipo de datos definido por el usuario de SQL Server, puede usar uno de los métodos siguientes para conservar los datos.
Supongamos que lo siguiente es el escenario:
- Cree un ensamblado cuyo nombre sea MyAssembly.dll
- El ensamblado MyAssembly hace referencia al ensamblado
System.DirectoryServices.dll
. - Tiene un tipo de datos definido por el usuario cuyo nombre es MyDateTime.
- El tipo de datos MyDateTime utiliza el ensamblado MyAssembly.dll.
- Cree una tabla cuyo nombre sea MyTable.
- La tabla MyTable contiene los datos del tipo de datos MyDateTime.
Método 1: Usar la utilidad bcp.exe
Use la utilidad Bcp.exe junto con el modificador -n para copiar los datos de la tabla MyTable en un archivo. Por ejemplo, ejecute el comando siguiente en el símbolo del sistema:
bcp MyDatabase.dbo.MyTable out C:\MyFile.bcp -n -SSQLServerName -T
En SQL Server Management Studio, siga estos pasos:
- Coloque la tabla MyTable.
- Coloque el tipo de datos MyDateTime.
- Coloque el ensamblado
System.DirectoryServices.dll
. - Coloque el ensamblado MyAssembly.
En SQL Server Management Studio, siga estos pasos:
- Registre el ensamblado
System.DirectoryServices.dll
. - Registre el ensamblado MyAssembly.
- Cree el tipo de datos MyDateTime.
- Cree una nueva tabla que tenga la misma estructura de tabla que la tabla MyTable.
- Registre el ensamblado
Use la utilidad Bcp.exe junto con el modificador -n para importar los datos del archivo en la tabla MyTable. Por ejemplo, ejecute el comando siguiente en el símbolo del sistema:
bcp MyDatabase.dbo.MyTable in C:\MyFile.bcp -n -SSQLServerName -T
Método 2: Usar insert ... Instrucción SELECT
Supongamos que el tipo de datos MyDateTime ocupa 9 bytes en el almacenamiento.
En SQL Server Management Studio, cree una nueva tabla que contenga una columna del tipo de datos mediante la
VARBINARY(9)
ejecución de la instrucción siguiente:CREATE TABLE TempTable (c1 VARBINARY(9));
Ejecute la siguiente instrucción INSERT ... Instrucción SELECT para rellenar la tabla TempTable:
INSERT INTO TempTable SELECT CAST(c1 as VARBINARY(9)) FROM MyTable;
En SQL Server Management Studio, siga estos pasos:
- Coloque la tabla MyTable.
- Coloque el tipo de datos MyDateTime.
- Coloque el ensamblado System.DirectoryServices.dll.
- Coloque el ensamblado MyAssembly.
En SQL Server Management Studio, siga estos pasos:
- Registre el ensamblado System.DirectoryServices.dll.
- Registre el ensamblado MyAssembly.
- Cree el tipo de datos MyDateTime.
- Cree una nueva tabla que tenga la misma estructura de tabla que la tabla MyTable.
Ejecute la siguiente instrucción INSERT ... Instrucción SELECT para rellenar la tabla MyTable:
INSERT INTO MyTable SELECT c1 FROM TempTable;
Referencias
- Para obtener más información sobre la versión del ensamblado, consulte la documentación retirada de Visual Studio 2005.
- Para obtener más información sobre cómo actualizar un ensamblado, consulte ALTER ASSEMBLY (Transact-SQL).
- Para obtener más información sobre cómo colocar un ensamblado, consulte DROP ASSEMBLY (Transact-SQL).
- Para obtener más información sobre cómo registrar un ensamblado en una base de datos de SQL Server, vea CREATE ASSEMBLY (Transact-SQL).
- Para más información acerca de la utilidad Bcp.exe, consulte https://msdn2.microsoft.com/library/ms162802.aspx.