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
以十六進位常值的形式指定套件的內容,類似於組件。
如果您具備改變程式庫的必要權限,但在伺服器上的檔案存取受到限制,且您無法將內容儲存至伺服器可存取的路徑,這個選項就非常有用。
您可以改為以二進位格式的變數來傳遞套件內容。
platform = 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 副檔名的 ZIP 壓縮封存檔案形式備妥套件。 在 SQL Server 2017 中僅支援 Windows 平台。
針對 R 語言,在使用檔案時,必須以具有 .ZIP 副檔名的 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
的外部程式庫。
使用檔案取代程式庫的內容
下列範例會使用包含更新位元的 ZIP 壓縮檔案,來修改名為 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