Síntomas
Al ejecutar una extensión de idioma externa de terceros que depende de otra biblioteca compartida, puede recibir un mensaje de error.
Error de biblioteca no encontrada
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".
Resolución
Este problema se corrige en la siguiente actualización acumulativa para SQL Server:
Acerca de las actualizaciones acumulativas para SQL Server:
Cada nueva actualización acumulativa para SQL Server contiene todas las revisiones y correcciones de seguridad que se incluyeron con la actualización acumulativa anterior. Consulte las actualizaciones acumulativas más recientes para SQL Server:
Solución alternativa
Para Windows:
Para solucionar este problema, debe agregar explícitamente:
- la ruta de acceso a las bibliotecas de dependencias si el zip de extensión de idioma no contiene la biblioteca de dependencias O
- los directorios de idioma y extensión Si el zip de extensión de lenguaje contiene la biblioteca de dependencias además de la extensión en sí
a la variable de entorno PATH del sistema, de modo que se puedan encontrar las bibliotecas de dependencias.
Por ejemplo:
Escenario 1:
- Tiene una extensión de lenguaje con una biblioteca de dependencias en la ubicación: C:\\Users\\admin\\Documents\\dependency.dll.
- El language-extension.zip solo contiene el languageExtension.dll.
- A continuación, asegúrese de que la ruta de acceso a la dependencia se agrega a la variable de entorno PATH del sistema. Por ejemplo, C:\\Usuarios\\admin\\Documentos.
CREATE EXTERNAL LANGUAGE [mylanguage]
FROM (CONTENT = N'C:\\Users\\admin\\Documents\\language-extension.zip', FILE_NAME = 'languageExtension.dll')
IR
Escenario 2:
- Si el language-extension.zip contiene tanto el languageExtension.dll de extensión como su biblioteca de dependencias ,dependency.dll, busque primero el siguiente identificador de idioma a partir de 65536 ejecutando la siguiente vista de catálogo en la base de datos correspondiente y agregando 1 al identificador de idioma instalado más alto superior a 65536. Por ejemplo, para la base de datos maestra, "SELECT * FROM master.sys.external_languages".
- Genere la ruta de acceso al directorio de idioma reemplazando el nombre de la instancia, database_id y next_language_id en la siguiente ruta de acceso: C:\\Program Files\\Microsoft SQL Server\\MSSQL15. MSSQLSERVER\\MSSQL\\ExternalLanguages\\<database_id>\\next< language id>.
- A continuación, cree el idioma externo de la siguiente manera:
CREATE EXTERNAL LANGUAGE [mylanguage]
FROM (CONTENT = N'C:\\Users\\admin\\Documents\\language-extension.zip', FILE_NAME = 'languageExtension.dll',
ENVIRONMENT_VARIABLES = N'{"PATH":"C:\\ProgramFiles\\Microsoft SQLServer\\MSSQL15. MSSQLSERVER\\MSSQL\\ExternalLanguages\\1\\65536"}');
IR
Para Linux:
No hay solución, y siempre debe agregar ${ORIGIN} a la opción rpath del enlazador cuando compile las extensiones.
Por ejemplo: set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath,'${ORIGIN}'")
Referencias
Obtenga información sobre la terminología que usa Microsoft para describir las actualizaciones de software.