ALTER EXTERNAL LIBRARY (Transact-SQL)

Anwendungsbereich: JaSQL Server 2017 (14.x) und höher JaVerwaltete Azure SQL-Instanz

Ändert den Inhalt einer vorhandenen externen Paketbibliothek.

Hinweis

In SQL Server 2017 werden die R-Sprache und die Windows-Plattform unterstützt. Ab SQL Server 2019 werden R, Python und externe Programmiersprachen auf Windows- und Linux-Plattformen unterstützt.

Hinweis

In Azure SQL Managed Instance können Sie eine Bibliothek ändern, indem Sie diese entfernen und dann mithilfe von sqlmlutils die geänderte Version installieren. Weitere Informationen zu sqlmlutils finden Sie unter Installieren von Python-Paketen mit sqlmlutils und Installieren von neuen R-Paketen mit sqlmlutils.

Syntax fü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>
}

Syntax für 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 
}

Syntax für Azure SQL Managed Instance

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'
}

Argumente

library_name

Gibt den Namen einer vorhandenen Paketbibliothek an. Bibliotheken umfassen nur den Benutzer. Bibliotheksnamen müssen innerhalb des Kontexts eines bestimmten Benutzers oder Besitzers eindeutig sein.

Der Bibliotheksname kann nicht nach dem Zufallsprinzip zugewiesen werden. D.h., Sie müssen den Namen verwenden, den die aufrufende Runtime beim Laden des Pakets erwartet.

owner_name

Gibt den Namen eines Benutzers oder einer Rolle an, der oder die die externe Bibliothek besitzt.

file_spec

Gibt den Inhalt des Pakets für eine bestimmte Plattform an. Nur ein Dateiartefakt pro Plattform wird unterstützt.

Die Datei kann in Form eines lokalen Pfads oder eines Netzwerkpfads angegeben werden. Wenn die Datenquellenoption angegeben ist, kann der Dateiname ein relativer Pfad zu dem Container sein, auf den in EXTERNAL DATA SOURCE verwiesen wird.

Optional kann eine Betriebssystemplattform für die Datei angegeben werden. Für jede Betriebssystemplattform für eine bestimmte Sprache oder Runtime ist nur jeweils ein Darteiartefakt oder Inhalt erlaubt.

library_bits

Gibt ähnlich wie bei Assemblys den Inhalt des Pakets als Hexadezimalliteral an.

Diese Option ist nützlich, wenn Sie die erforderliche Berechtigung zum Ändern einer Bibliothek haben. Jedoch ist der Zugriff auf Daten auf dem Server beschränkt, und Sie können die Inhalte nicht in einem Pfad speichern, auf den der Server zugreifen kann.

Stattdessen können Sie den Paketinhalt als Variable im Binärformat übergeben.

platform = WINDOWS

Gibt die Plattform für den Inhalt der Bibliothek an. Dieser Wert ist erforderlich, wenn eine vorhandene Bibliothek geändert wird, um eine andere Plattform hinzuzufügen. Für SQL Server 2017 ist Windows die einzige unterstützte Plattform.

platform

Gibt die Plattform für den Inhalt der Bibliothek an. Dieser Wert ist erforderlich, wenn eine vorhandene Bibliothek geändert wird, um eine andere Plattform hinzuzufügen. Für SQL Server 2019 werden die Plattformen Windows und Linux unterstützt.

LANGUAGE = 'R'

gibt die Sprache des Pakets an. R wird in SQL Server 2017 unterstützt.

language

gibt die Sprache des Pakets an. Der Wert kann R oder Python in Azure SQL Managed Instance sein.

language

gibt die Sprache des Pakets an. Der Wert kann R, Python oder der Name einer externen Programmiersprache (siehe CREATE EXTERNAL LANGUAGE) sein.

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.

Bemerkungen

Bei der R-Sprache müssen Pakete in Form von gezippten Archivdateien mit der Dateiendung .zip für Windows vorbereitet werden. Für SQL Server 2017 wird nur die Windows-Plattform unterstützt.

Bei der R-Sprache müssen bei Verwendung einer Datei Pakete in Form von gezippten Archivdateien mit der Erweiterung „.ZIP“ vorbereitet werden.

Für Python muss das Paket in einer WHL- oder ZIP-Datei als ZIP-Archivdatei vorbereitet werden. Wenn das Paket bereits eine ZIP-Datei ist, muss es in eine neue ZIP-Datei eingefügt werden. Der direkte Upload einer WHL- oder ZIP-Datei wird derzeit nicht unterstützt.

Die ALTER EXTERNAL LIBRARY-Anweisung lädt nur die Bibliothekbits in die Datenbank hoch. Die geänderte Bibliothek wird installiert, wenn ein Benutzer Code in sp_execute_external_script (Transact-SQL) ausführt, der die Bibliothek aufruft.

In einer SQL-Instanz sind einige Pakete vorinstalliert. Diese werden als Systempakete bezeichnet. Systempakete können vom Benutzer weder hinzugefügt noch aktualisiert oder entfernt werden.

Berechtigungen

Standardmäßig verfügen der dbo-Benutzer sowie alle Mitglieder der Rolle db_owner über die Berechtigung zum Ausführen von ALTER EXTERNAL LIBRARY. Darüber hinaus kann der Benutzer, der die externe Bibliothek erstellt hat, diese ändern.

Beispiele

Die folgenden Beispiele ändern eine externe Bibliothek namens customPackage.

Ersetzen des Inhalts einer Bibliothek mithilfe einer Datei

Im folgenden Beispiel wird eine externe Bibliothek mit dem Namen customPackage mithilfe einer ZIP-Datei geändert, die die aktualisierten Bits enthält.

ALTER EXTERNAL LIBRARY customPackage 
SET 
  (CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\customPackage.zip')
WITH (LANGUAGE = 'R');

Führen Sie die gespeicherte Prozedur sp_execute_external_script aus, um die aktualisierte Bibliothek zu installieren.

EXEC sp_execute_external_script 
@language =N'R', 
@script=N'library(customPackage)'
;

Das Beispiel funktioniert auch für Python, wenn Sie 'R' durch 'Python' ersetzen.

Ändern einer vorhandenen Bibliothek mithilfe eines Bytedatenstroms

Im folgenden Beispiel wird die vorhandene Bibliothek geändert, indem die neuen Bits als ein Hexadezimalliteral übergeben werden.

ALTER EXTERNAL LIBRARY customLibrary 
SET (CONTENT = 0xABC123...) WITH (LANGUAGE = 'R');

Das Beispiel funktioniert auch für Python, wenn Sie 'R' durch 'Python' ersetzen.

Hinweis

Dieses Codebeispiel zeigt nur die Syntax; der Binärwert in CONTENT = wurde zur besseren Lesbarkeit gekürzt und erstellt keine funktionierende Bibliothek. Der tatsächliche Inhalt der binären Variable wäre wesentlich länger.

Weitere Informationen

CREATE EXTERNAL LIBRARY (Transact-SQL)
DROP EXTERNAL LIBRARY (Transact-SQL)
sys.external_library_files
sys.external_libraries