ALTER EXTERNAL LIBRARY (Transact-SQL)
适用于: SQL Server 2017 (14.x) 及更高版本 Azure SQL 托管实例
修改现有外部包库的内容。
注意
在 SQL Server 2017 中,支持 R 语言和 Windows 平台。 SQL Server 2019 及更高版本支持 Windows 和 Linux 平台上的 R、Python 和外部语言。
备注
在 Azure SQL 托管实例中,可以通过先删除某个库,然后使用 sqlmlutils 安装更改的版本来更改此库。 有关 sqlmlutils 的详细信息,请参阅使用 sqlmlutils 安装 Python 包和使用 sqlmlutils 安装新的 R 包。
SQL Server 2019 语法
ALTER EXTERNAL LIBRARY library_name
[ AUTHORIZATION owner_name ]
SET <file_spec>
WITH ( LANGUAGE = <language> )
[ ; ]
<file_spec> ::=
{
(CONTENT = { <client_library_specifier> | <library_bits> | NONE}
[, PLATFORM = <platform> )
}
<client_library_specifier> :: =
{
'[\\computer_name\]share_name\[path\]manifest_file_name'
| '[local_path\]manifest_file_name'
| '<relative_path_in_external_data_source>'
}
<library_bits> :: =
{
varbinary_literal
| varbinary_expression
}
<platform> :: =
{
WINDOWS
| LINUX
}
<language> :: =
{
'R'
| 'Python'
| <external_language>
}
SQL Server 2017 语法
ALTER EXTERNAL LIBRARY library_name
[ AUTHORIZATION owner_name ]
SET <file_spec>
WITH ( LANGUAGE = 'R' )
[ ; ]
<file_spec> ::=
{
(CONTENT = { <client_library_specifier> | <library_bits> | NONE}
[, PLATFORM = WINDOWS )
}
<client_library_specifier> :: =
{
'[\\computer_name\]share_name\[path\]manifest_file_name'
| '[local_path\]manifest_file_name'
| '<relative_path_in_external_data_source>'
}
<library_bits> :: =
{
varbinary_literal
| varbinary_expression
}
Azure SQL 托管实例的语法
CREATE EXTERNAL LIBRARY library_name
[ AUTHORIZATION owner_name ]
FROM <file_spec> [ ,...2 ]
WITH ( LANGUAGE = <language> )
[ ; ]
<file_spec> ::=
{
(CONTENT = <library_bits>)
}
<library_bits> :: =
{
varbinary_literal
| varbinary_expression
}
<language> :: =
{
'R'
| 'Python'
}
参数
library_name
指定现有包库的名称。 库的应用范围限定为用户。 在特定用户或所有者的上下文中,库名称必须是唯一的。
不能任意分配库名称。 也就是说,必须使用调用运行时在加载包时需要的名称。
owner_name
指定拥有外部库的用户或角色的名称。
file_spec
指定特定平台的包的内容。 每个平台仅支持一个文件项目。
可以是以本地路径或网络路径的形式指定的文件。 如果指定了数据源选项,则文件名称可以是关于 EXTERNAL DATA SOURCE
中引用的容器的相对路径。
还可以为文件指定一个 OS 平台。 针对特定语言或运行时,每个 OS 平台只允许一个文件项目或内容。
library_bits
将包的内容指定为十六进制文本,类似于程序集。
如果具有更改库所需的权限,但在服务器上访问文件受到限制,并且无法将内容保存到服务器可以访问的路径,则此选项非常有用。
相反,可以将包内容作为变量以二进制格式进行传递。
平台 = WINDOWS
为库的内容指定平台。 在修改现有库以添加不同的平台时,此值是必需的。 在 SQL Server 2017 中,Windows 是唯一受支持的平台。
平台
为库的内容指定平台。 在修改现有库以添加不同的平台时,此值是必需的。 在 SQL Server 2019 中,Windows 和 Linux 是受支持的平台。
LANGUAGE = 'R'
指定包的语言。 SQL Server 2017 中支持 R。
language
指定包的语言。 在 Azure SQL 托管实例中,该值可以是 R,也可以是 Python 。
language
指定包的语言。 该值可以是 R、Python 或外部语言的名称(请参阅创建外部语言) 。
注解
对于 R 语言,准备包时,包的形式须为适用于 Windows 、扩展名为 .ZIP 的压缩存档文件。 在 SQL Server 2017 中,仅支持 Windows 平台。
对于 R 语言,使用文件时,必须使用 .ZIP 扩展名以压缩存档文件的形式准备包。
对于 Python 语言,必须以压缩存档文件的形式准备 .whl 或 .zip 文件中的包。 如果包已经是 .zip 文件,则必须将其包含在新的 .zip 文件中。 目前不支持将包作为 .whl 或 .zip 文件直接上传。
ALTER EXTERNAL LIBRARY
语句只将库位上载到数据库。 当用户在调用库的 sp_execute_external_script (TRANSACT-SQL) 中运行代码时,安装已修改的库。
许多包(称为“系统包”)都预安装在 SQL 实例中。 用户无法添加、更新或删除系统包。
权限
默认情况下,dbo 用户或担任 db_owner 角色的任何成员都有权运行 ALTER EXTERNAL LIBRARY。 此外,创建了外部库的用户还可以更改相应外部库。
示例
下面的示例更改 customPackage
外部库。
使用文件替换库的内容
下面的示例使用包含更新位的压缩文件修改名为 customPackage
的外部库。
ALTER EXTERNAL LIBRARY customPackage
SET
(CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\customPackage.zip')
WITH (LANGUAGE = 'R');
若要安装更新的库,请执行存储过程 sp_execute_external_script
。
EXEC sp_execute_external_script
@language =N'R',
@script=N'library(customPackage)'
;
对于 Python 语言,可通过将 'R'
替换为 'Python'
使用示例。
使用字节流更改现有库
下面的示例通过将新位传递为十六进制文本来更改现有库。
ALTER EXTERNAL LIBRARY customLibrary
SET (CONTENT = 0xABC123...) WITH (LANGUAGE = 'R');
对于 Python 语言,可通过将 'R'
替换为 'Python'
使用示例。
注意
此代码示例只用于展示语法;为了提高可读性,CONTENT =
中的二进制值已遭截断,无法创建能够正常运行的库。 二进制变量的实际内容要长得多。
另请参阅
CREATE EXTERNAL LIBRARY (Transact-SQL)
DROP EXTERNAL LIBRARY (Transact-SQL)
sys.external_library_files
sys.external_libraries