Share via


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 受控執行個體中,此值可以是 RPython

language

指定套件的語言。 此值可以是 RPython 或外部語言的名稱 (請參閱建立外部語言)。

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

備註

對於 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