CREATE EXTERNAL LANGUAGE (Transact-SQL)

適用於:SQL Server 2019 (15.x) 和更新版本

從指定的檔案路徑或位元組資料流,註冊資料庫中的外部延伸模組。 此語句是一種通用機制,供資料庫管理員在 SQL Server 支援的任何作業系統平台上註冊新的外部語言擴充功能。 如需詳細資訊,請參閱語言延伸模組。

注意

R 和 Python 是保留名稱。 你無法用這些特定名稱創建外部語言。 如需如何使用 R 和 Python 的詳細資訊,請參閱 SQL Server 機器學習服務。

語法

CREATE EXTERNAL LANGUAGE language_name  
[ AUTHORIZATION owner_name ]  
FROM <file_spec> [ ,...2 ]  
[ ; ]  

<file_spec> ::=  
{
    ( CONTENT = { <external_lang_specifier> | <content_bits> },
    FILE_NAME = <external_lang_file_name>
    [ , PLATFORM = <platform> ]
    [ , PARAMETERS = <external_lang_parameters> ]
    [ , ENVIRONMENT_VARIABLES = <external_lang_env_variables> ] )
}

<external_lang_specifier> :: =  
{
    '[file_path\]os_file_name'  
}

<content_bits> :: =  
{
    varbinary_literal
    | varbinary_expression
}

<external_lang_file_name> :: =  
'extension_file_name'


<platform> :: =
{
    WINDOWS
  | LINUX
}

<external_lang_parameters> :: =  
'extension_specific_parameters'

引數

language_name

語言是資料庫範圍的物件。 語言名稱在資料庫內必須是唯一的。

owner_name

指定擁有外部語言的使用者或角色名稱。 如果你沒指定值,現在的使用者就會成為擁有者。 根據權限不同,其他使用者可能需要明確權限才能使用特定語言執行腳本。

file_spec

指定語言延伸模組的內容。 每個平台只允許針對特定語言使用一個。<file_spec>

external_lang_specifier

包含該副檔名程式碼的完整檔案路徑,指向 .zip 或tar.gz檔案。 這些內容可以是 .zip 檔案的路徑(Windows 上)或 tar.gz 檔案(Linux 上)。

content_bits

以十六進位常值形式指定語言的內容,類似於組件。

當伺服器檔案系統受限且無法將函式庫檔案複製到伺服器能存取的位置時,請使用此選項。 您必須擁有建立或修改該語言所需的權限。

external_lang_file_name

.dll 或 .so 檔案副檔名名稱。 當 .zip 或tar.gz中存在 <external_lang_specifier> 多個 .dll 或 .so 檔案時,名稱用來識別正確的檔案。

external_lang_parameters

指定一組參數,傳送給外部語言執行時。 外部執行時在外部程序啟動後接收參數值。 相較之下,環境變數會在外部程序開始前就已被語言擴充存取。

.external_lang_env_variables

指定一組環境變數,以便在外部程序開始前提供給外部語言執行時。 例如,設定執行時本身的主目錄,例如 JRE_HOME。

平台

混合式作業系統案例需要此參數。 在混合架構中,你必須在每個平台註冊一次語言。 如果你沒指定平台,SQL Server 會假設你是目前的作業系統。

權限

需要 CREATE EXTERNAL LANGUAGE 權限。 預設情況下, db_owner 固定資料庫角色的任何成員都有建立外部語言的權限。 對於其他使用者,你必須透過使用 GRANT 聲明 CREATE EXTERNAL LANGUAGE 明確授予權限,並指定為該權限。

要修改函式庫,你需要另外的權限。 ALTER ANY EXTERNAL LANGUAGE

EXECUTE EXTERNAL SCRIPT 權限

使用 EXECUTE EXTERNAL SCRIPT 權限授權特定語言執行外部腳本。 EXECUTE EXTERNAL SCRIPT 與 EXECUTE ANY EXTERNAL SCRIPT 資料庫權限不同,後者不允許對特定語言授予執行權限。

授權非 DBO 使用者執行特定語言:

GRANT EXECUTE EXTERNAL SCRIPT ON EXTERNAL LANGUAGE ::language_name
TO database_principal_name;

外部程式庫的參考權限

與組合語言類似,外部語言需要參考權限,以確保外部函式庫與外部語言之間有連結。 例如,在你丟棄一個外部語言之前,必須先刪除所有引用該語言的外部函式庫。 將外部語言視為階層結構中比外部函式庫更高層次的物件。

範例

A. 在資料庫中建立外部語言

下例會將外部語言呼叫的 Java 新增至 Windows 之 SQL Server 的資料庫。

CREATE EXTERNAL LANGUAGE Java 
FROM (CONTENT = N'<path-to-zip>', FILE_NAME = 'javaextension.dll');
GO

B. 建立適用於 Windows 和 Linux 的外部語言

您最多可以指定兩個 <file_spec>,一個用於 Windows,一個用於 Linux。

CREATE EXTERNAL LANGUAGE Java
FROM
(CONTENT = N'<path-to-zip>', FILE_NAME = 'javaextension.dll', PLATFORM = WINDOWS),
(CONTENT = N'<path-to-tar.gz>', FILE_NAME = 'javaextension.so', PLATFORM = LINUX);
GO

C. 授與執行外部指令碼的權限

下列範例對 mylogin 授與可使用 Java 外部語言執行指令碼的主體存取權。

GRANT EXECUTE EXTERNAL SCRIPT ON EXTERNAL LANGUAGE ::Java 
TO mylogin;