症状
运行依赖于另一个共享库的第三方外部语言扩展时,可能会收到错误消息。
找不到库错误
状态
Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。
解决方法
此问题已在 SQL Server 的累积更新中进行了修复:
关于 SQL Server 的累积更新:
SQL Server 的每个新累积更新都包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
解决方法
对于 Windows:
若要解决此问题,应显式添加:
- 如果语言扩展 zip 不包含依赖项库,则为依赖项库的路径;或者
- 语言和扩展目录 如果语言扩展 zip 除了包含扩展本身外,还包含依赖项库
添加到系统 PATH 环境变量,以便可以找到依赖项库。
例如:
方案 1:
- 你有一个语言扩展,其位置为: C:\\Users\\admin\\Documents\\dependency.dll。
- language-extension.zip 仅包含 languageExtension.dll。
- 然后,确保将依赖项的路径添加到系统 PATH 环境变量中。 例如: C:\\Users\\admin\\Documents。
CREATE EXTERNAL LANGUAGE [mylanguage]
FROM (CONTENT = N'C:\\Users\\admin\\Documents\\language-extension.zip', FILE_NAME = 'languageExtension.dll')
GO
方案 2:
- 如果 language-extension.zip 同时包含扩展 languageExtension.dll 及其依赖项库 - dependency.dll, 请首先通过在相应的数据库中运行以下目录视图并将 1 添加到大于 65536 的最高已安装语言 ID 来查找从 65536 开始的下一个语言 ID。 例如,对于 master 数据库,“SELECT * FROM master.sys.external_languages”。
- 通过在以下路径中替换实例名称、database_id 和 next_language_id,生成语言目录的路径:C:\\Program Files\\Microsoft SQL Server\\MSSQL15。MSSQLSERVER\\MSSQL\\ExternalLanguages\\database_id>\\<next language id><。
- 然后,创建外部语言,如下所示:
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“}') ;
GO
对于 Linux:
没有修复,在编译扩展时应始终将 ${ORIGIN} 添加到链接器 rpath 选项。
例如:set (CMAKE_SHARED_LINKER_FLAGS “${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath,'${ORIGIN}'”)
参考资料
了解 Microsoft 用于描述软件更新的术语。