CREATE EXTERNAL LANGUAGE (Transact-SQL)

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores

Regista extensões de linguagem externa na base de dados a partir do caminho de ficheiro ou fluxo de bytes especificado. Esta afirmação é um mecanismo genérico para o administrador da base de dados registar novas extensões de linguagem externa em qualquer plataforma de SO que o SQL Server suporte. Para mais informações, consulte Extensões de Linguagem.

Note

R e Python são nomes reservados. Não se pode criar uma linguagem externa com esses nomes específicos. Para mais informações sobre como usar R e Python, consulte SQL Server Machine Learning Serviços.

Syntax

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'

Arguments

language_name

As linguagens são objetos com âmbito de base de dados. Os nomes das línguas devem ser únicos dentro da base de dados.

owner_name

Especifica o nome do utilizador ou função que detém a linguagem externa. Se não especificar um valor, o utilizador atual torna-se o proprietário. Dependendo das permissões, outros utilizadores podem precisar de permissão explícita para executar scripts usando uma linguagem específica.

file_spec

Especifica o conteúdo da extensão da linguagem. Só é permitido um <file_spec> para uma língua específica, por plataforma.

external_lang_specifier

O caminho completo do ficheiro para o ficheiro .zip ou tar.gz que contém o código da extensão. Este conteúdo pode ser um caminho para um ficheiro .zip (no Windows) ou um ficheiro tar.gz (no Linux).

content_bits

Especifica o conteúdo da linguagem como um literal hexadecimal, semelhante a assemblies.

Use esta opção quando o sistema de ficheiros do servidor estiver restrito e não puder copiar os ficheiros da biblioteca para um local acessível ao servidor. Deve ter as permissões necessárias para criar ou alterar a linguagem.

external_lang_file_name

Nome da extensão .dll ou ficheiro .so. O nome identifica o ficheiro correto quando existem vários ficheiros .dll ou .so na <external_lang_specifier> .zip ou tar.gz.

external_lang_parameters

Especifica um conjunto de parâmetros a passar para o runtime da linguagem externa. O tempo de execução externo recebe valores de parâmetros após o início do processo externo. As variáveis de ambiente, em contraste, tornam-se acessíveis à extensão da linguagem antes do início do processo externo.

external_lang_env_variables

Especifica um conjunto de variáveis de ambiente a disponibilizar ao tempo de execução da linguagem externa antes do início do processo externo. Por exemplo, definir o diretório principal do próprio runtime, como JRE_HOME.

plataforma

Este parâmetro é necessário para cenários de sistemas operativos híbridos. Numa arquitetura híbrida, deve registar a linguagem uma vez por plataforma. Se não especificares uma plataforma, o SQL Server assume o sistema operativo atual.

Permissions

Requer a permissão de CREATE EXTERNAL LANGUAGE. Por defeito, qualquer membro da db_owner função fixa de base de dados tem permissões para criar uma linguagem externa. Para todos os outros utilizadores, deve conceder explicitamente permissão usando uma GRANT instrução, especificando CREATE EXTERNAL LANGUAGE como privilégio.

Para modificar uma biblioteca, precisa da permissão separada, ALTER ANY EXTERNAL LANGUAGE.

PERMISSÃO PARA EXECUTAR SCRIPT EXTERNO

Use EXECUTE EXTERNAL SCRIPT permissões para conceder execução de scripts externos em linguagens específicas. EXECUTE EXTERNAL SCRIPT difere da EXECUTE ANY EXTERNAL SCRIPT permissão da base de dados, que não permite conceder permissão de execução numa linguagem específica.

Conceda permissão a utilizadores não DBO para executar uma linguagem específica:

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

Permissões de referência para bibliotecas externas

Tal como nas assemblies, as linguagens externas requerem permissões de referência para que haja uma ligação entre bibliotecas externas e linguagens externas. Por exemplo, antes de eliminar uma linguagem externa, deve eliminar todas as bibliotecas externas que a referenciam. Veja a linguagem externa como um objeto de nível superior ao das bibliotecas externas na hierarquia.

Examples

A. Criar uma linguagem externa numa base de dados

O exemplo a seguir adiciona uma linguagem externa chamada Java a um banco de dados no SQL Server no Windows.

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

B. Criar uma linguagem externa para Windows e Linux

Você pode especificar até dois <file_spec>, um para Windows e outro para 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. Conceder permissões para executar scripts externos

O exemplo seguinte concede ao mylogin acesso principal para executar scripts usando a linguagem externa Java.

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