Condividi tramite


CREATE EXTERNAL LANGUAGE (Transact-SQL)

Si applica a: SQL Server 2019 (15.x)

Registra estensioni di linguaggio esterno nel database partendo dal percorso file specificato o dal flusso di byte. Questa istruzione funge da meccanismo generico per l'amministratore del database per la registrazione di nuove estensioni di linguaggio esterno in tutte le piattaforme del sistema operativo supportate da SQL Server. Per altre informazioni, vedere Estensioni del linguaggio.

Nota

R e Python sono nomi riservati e nessun linguaggio esterno può essere creato con tali nomi specifici. Per altre informazioni su come usare R e Python, vedere SQL Server Machine Learning Services.

Sintassi

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'

Argomenti

language_name

I linguaggi sono oggetti con ambito di database. I nomi dei linguaggi devono essere univoci all'interno del database.

owner_name

Specifica il nome dell'utente o del ruolo che è proprietario del linguaggio esterno. Se viene omesso, la proprietà viene assegnata all'utente corrente. A seconda delle autorizzazioni, è possibile che sia necessario concedere ad altri utenti autorizzazione esplicita per eseguire script con un linguaggio specifico.

file_spec

Specifica il contenuto dell'estensione del linguaggio. È consentito un solo filespec per un linguaggio specifico, per ogni piattaforma.

external_lang_specifier

Percorso file completo al file con estensione zip o al file tar.gz che contiene il codice delle estensioni. Può essere un percorso a un file con estensione zip (in Windows) o al file tar.gz (in Linux).

content_bits

Specifica il contenuto del linguaggio come valore letterale esadecimale, analogamente agli assembly.

Questa opzione è utile se è necessario creare un linguaggio o modificare un linguaggio esistente (e si hanno le autorizzazioni necessarie a tale scopo), ma il file system del server è soggetto a restrizioni e non è possibile copiare i file di libreria in un percorso a cui il server può accedere.

external_lang_file_name

Nome del file con estensione dll o so. Questo nome è necessario per identificare il file corretto, nei casi in cui il file ZIP o TAR.GZ specificato da <external_lang_specifier> contenga diversi file DDL o SO.

external_lang_parameters

Consente di assegnare un set di parametri al runtime del linguaggio esterno. I valori dei parametri sono disponibili per il runtime esterno dopo che il processo esterno è stato avviato. Le variabili di ambiente sono invece accessibili all'estensione del linguaggio prima dell'avvio del processo esterno.

external_lang_env_variables

Consente di assegnare un set di variabile di ambiente al runtime del linguaggio esterno prima dell'avvio del processo esterno. Un esempio di variabile di ambiente è ad esempio la home directory del runtime stesso. Ad esempio: JRE_HOME.

platform

Questo parametro è necessario per gli scenari ibridi del sistema operativo. In un'architettura ibrida il linguaggio deve essere registrato una volta per ogni piattaforma. Se non viene specificata una piattaforma, viene usato il sistema operativo corrente.

Autorizzazioni

È necessaria l'autorizzazione CREATE EXTERNAL LANGUAGE. Per impostazione predefinita, ogni utente con dbo che è membro del ruolo db_owner ha le autorizzazioni per creare un linguaggio esterno. Per tutti gli altri utenti, è necessario concedere in modo esplicito l'autorizzazione usando un'istruzione GRANT, specificando CREATE EXTERNAL LANGUAGE come privilegio.

Per modificare una libreria è necessaria un'altra autorizzazione, ALTER ANY EXTERNAL LANGUAGE.

Autorizzazione EXECUTE EXTERNAL SCRIPT

È possibile usare le autorizzazioni EXECUTE EXTERNAL SCRIPT in modo da concedere l'esecuzione dello script esterno in linguaggi specifici. Questa autorizzazione è diversa dall'autorizzazione di database EXECUTE ANY EXTERNAL SCRIPT, che non concede l'autorizzazione di esecuzione in un linguaggio specifico.

In questo modo gli utenti non-dbo devono avere l'autorizzazione per eseguire un linguaggio specifico:

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

Autorizzazioni di riferimento a librerie esterne

Analogamente agli assembly, sono necessarie autorizzazioni di riferimento per i linguaggi esterni, in modo da creare un collegamento tra le librerie esterne e i linguaggi esterni. Ad esempio, se un linguaggio esterno sarà eliminato, l'utente deve prima assicurarsi che tutte le librerie esterne che fanno riferimento a quel linguaggio siano eliminate. È ora possibile visualizzare il linguaggio esterno come oggetto di un livello superiore rispetto alle librerie esterne, all'interno di una gerarchia.

Esempi

R. Creare un linguaggio esterno in un database

L'esempio seguente aggiunge un linguaggio esterno denominato Java a un database in SQL Server in Windows.

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

B. Aggiungere un linguaggio esterno per Windows e Linux

È possibile specificare fino a due <file_spec>, uno per Windows e uno per 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. Concedere le autorizzazioni per eseguire script esterni

Nell'esempio seguente viene concesso l'accesso all'entità di sicurezza mylogin per l'esecuzione di script usando il linguaggio esterno Java.

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

Vedi anche

ALTER EXTERNAL LANGUAGE (Transact-SQL)
DROP EXTERNAL LANGUAGE (Transact-SQL)
sys.external_languages
sys.external_language_files