CREATE EXTERNAL LANGUAGE (Transact-SQL)
適用於:SQL Server 2019 (15.x)
從指定的檔案路徑或位元組資料流,註冊資料庫中的外部延伸模組。 此陳述式可作為一般機制,供資料庫管理員在 SQL Server 支援的任何 OS 平台上註冊新外部語言延伸模組。 如需詳細資訊,請參閱語言延伸模組。
注意
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
指定語言延伸模組的內容。 每個平台的特定語言只允許一種檔案規格。
external_lang_specifier
.zip 或 .tar.gz 檔案的完整檔案路徑包含延伸模組程式碼。 此內容可以是 .zip 檔案 (Windows) 或 .tar.gz (Linux) 的路徑。
content_bits
以十六進位常值形式指定語言的內容,類似於組件。
如果您必須建立語言或更改現有的語言 (且具備執行此操作所需的權限),但伺服器上的檔案系統受到限制,而您無法將程式庫檔案複製到伺服器能夠存取的位置,則此選項會相當有用。
external_lang_file_name
.dll 或 .so 檔案副檔名名稱。 當 <external_lang_specifier> .zip 或 tar.gz 有數個 .dll 或 .so 檔案時,那麼一定要有此項目才能識別正確的檔案。
external_lang_parameters
這有可能向外部語言執行階段提供一組參數。 外部處理序啟動之後,參數值會提供給外部執行階段。 但在外部處理序啟動之前,語言延伸模組可以存取環境變數。
.external_lang_env_variables
這可能會在外部處理序啟動之前,向外部語言執行階段提供一組環境變數。 例如,執行階段本身的主目錄即為環境變數範例。 例如:JRE_HOME。
平台
混合式作業系統案例需要此參數。 在混合式架構中,語言需要在每個平台註冊一次。 如未指定任何平台,則假設為目前的作業系統。
權限
需要 CREATE EXTERNAL LANGUAGE
權限。 根據預設,任何具有 dbo 或為 db_owner 角色成員使用者都有建立外部語言的權限。 針對其他所有使用者,您必須使用 GRANT 陳述式指定 CREATE EXTERNAL LANGUAGE 作為權限,以明確授與權限給他們。
若要修改程式庫,需要個別的權限 ALTER ANY EXTERNAL LANGUAGE
。
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;
另請參閱
ALTER EXTERNAL LANGUAGE (Transact-SQL)
DROP EXTERNAL LANGUAGE (Transact-SQL)
sys.external_languages
sys.external_language_files