API pro Extensibility Framework pro SQL Server

platí pro: SQL Server 2019 (15.x) a novější verze

Rozšiřitelný framework můžete použít k psaní rozšíření programovacích jazyků pro SQL Server. API Extensibility Framework pro SQL Server je API, které může jazykové rozšíření využívat k interakci a výměně dat se SQL Server.

Jako autor jazykových rozšíření můžete tuto referenci použít spolu s open-source jazykovými rozšířeními, abyste pochopili, jak API použít pro psaní vlastního. Zdrojový kód jazykových rozšíření najdete na aka.ms/mssql-lang-extensions.

Informace o syntaxi a argumentech všech funkcí API najdete v tomto článku.

Návratová hodnota

Všechny funkce vracejí parametr.SQLRETURN Pokud je hodnota jiná než SQL_SUCCESS, je hodnota považována za chybu a spuštění skriptu se zastaví.

Standardní výstup

Jakýkoli výstup rozšíření do standardních výstupních nebo chybových proudů je sledován do logu relace a nakonec zpět do SQL Server. To je podobné všemu, co se zobrazuje na záložce zpráv SQL Server Management Studio (SSMS).

Init

Tato funkce se volá pouze jednou a používá se k inicializaci běhu pro vykonání.

Syntax

SQLRETURN Init(
    SQLCHAR *ExtensionParams,
    SQLULEN ExtensionParamsLength,
    SQLCHAR *ExtensionPath,
    SQLULEN ExtensionPathLength,
    SQLCHAR *PublicLibraryPath,
    SQLULEN PublicLibraryPathLength,
    SQLCHAR *PrivateLibraryPath,
    SQLULEN PrivateLibraryPathLength
);

Arguments

Argument Vstup/výstup Description
ExtensionParams Vstup Řetězec s nulovým ukončením obsahující PARAMETERS hodnotu uvedenou během CREATE EXTERNAL LANGUAGE nebo ALTER EXTERNAL LANGUAGE
ExtensionParamsLength Vstup Délka v bajtech ( ExtensionParams s výjimkou znaku nulového ukončení)
ExtensionPath Vstup Null-terminovaný UTF-8 řetězec obsahující absolutní cestu k instalačnímu adresáři rozšíření
ExtensionPathLength Vstup Délka v bajtech ( ExtensionPath s výjimkou znaku nulového ukončení)
PublicLibraryPath Vstup Null-terminovaný UTF-8 řetězec obsahující absolutní cestu k adresáři veřejných externích knihoven pro tento externí jazyk
PublicLibraryPathLength Vstup Délka v bajtech ( PublicLibraryPath s výjimkou znaku nulového ukončení)
PrivateLibraryPath Vstup Null-terminovaný UTF-8 řetězec obsahující absolutní cestu k adresáři soukromých externích knihoven pro tohoto uživatele a tento externí jazyk
PrivateLibraryPathLength Vstup Délka v bajtech ( PrivateLibraryPath s výjimkou znaku nulového ukončení)

InitSession

Tato funkce se volá jednou za relaci a inicializuje se nastavení specifická pro relaci.

Syntax

SQLRETURN InitSession(
    SQLGUID         SessionId,
    SQLUSMALLINT    TaskId,
    SQLCHAR*        Script,
    SQLULEN         ScriptLength,
    SQLUSMALLINT    InputSchemaColumnsNumber,
    SQLUSMALLINT    ParametersNumber
    SQLCHAR*        InputDataName,
    SQLUSMALLINT    InputDataNameLength,
    SQLCHAR*        OutputDataName,
    SQLUSMALLINT    OutputDataNameLength
);

Arguments

Argument Vstup/výstup Description
SessionId Vstup GUID jedinečně identifikuje tuto skriptovou relaci
TaskId Vstup Celé číslo, které jednoznačně identifikuje tento proces vykonání.

Když @parallel je 1 v sp_execute_external_script, tato hodnota se pohybuje od 0 do stupně paralelismu dotazu
Script Vstup Null-ukončený UTF-8 řetězec obsahující v @scriptsp_execute_external_script
ScriptLength Vstup Délka v bajtech ( ScriptScript s výjimkou znaku nulového ukončení)
InputSchemaColumnsNumber Vstup Počet sloupců ve výsledné množině z @input_data_1sp_execute_external_script
ParametersNumber Vstup Počet vstupních parametrů z @paramssp_execute_external_script
InputDataName Vstup Null-ukončený UTF-8 řetězec obsahující v @input_data_1_namesp_execute_external_script
InputDataNameLength Vstup Délka v bajtech ( InputDataName s výjimkou znaku nulového ukončení)
OutputDataName Vstup Null-ukončený UTF-8 řetězec obsahující v @output_data_1_namesp_execute_external_script
OutputDataNameLength Vstup Délka v bajtech ( OutputDataName s výjimkou znaku nulového ukončení)

InitColumn

Inicializujte informace pro daný sloupec pro konkrétní relaci.

Tato funkce se volá pro každý sloupec ve výsledné množině z @input_data_1v sp_execute_external_script.

Sloupcová struktura této výsledné množiny se nazývá vstupní schéma.

Syntax

SQLRETURN InitColumn(
    SQLGUID       SessionId,
    SQLUSMALLINT  TaskId,
    SQLUSMALLINT  ColumnNumber,
    SQLCHAR*      ColumnName,
    SQLSMALLINT   ColumnNameLength,
    SQLSMALLINT   DataType,
    SQLULEN       ColumnSize,
    SQLSMALLINT   DecimalDigits,
    SQLSMALLINT   Nullable,
    SQLSMALLINT   PartitionByNumber,
    SQLSMALLINT   OrderByNumber
);

Arguments

Argument Vstup/výstup Description
SessionId Vstup GUID jedinečně identifikuje tuto skriptovou relaci
TaskId Vstup Celé číslo, které jednoznačně identifikuje tento proces vykonání.

Když @parallel je 1 v sp_execute_external_script, tato hodnota se pohybuje od 0 do stupně paralelismu dotazu
ColumnNumber Vstup Celé číslo identifikující index tohoto sloupce ve vstupním schématu. Sloupce jsou číslovány postupně v rostoucím pořadí začínajícím na 0
ColumnName Vstup Řetězec UTF-8 s nulovým ukončením obsahující název sloupce
ColumnNameLength Vstup Délka v bajtech ( ColumnName s výjimkou znaku nulového ukončení)
Data type Vstup Typ ODBC C identifikující datový typ tohoto sloupce
ColumnSize Vstup Maximální velikost podkladových dat v bajtech v tomto sloupci.

Pro SQL_C_CHAR, SQL_C_WCHAR a SQL_C_BINARY datové typy označují hodnoty větší než 8 000, že tento sloupec představuje objekt LOB s velikostí až 2 GB
DecimalDigits Vstup Desetinné číslice podkladových dat v tomto sloupci, jak jsou definovány desetinnými číslicemi
Nullable Vstup Hodnota, která označuje, zda tento sloupec může obsahovat NULL hodnoty. Možné hodnoty:

- SQL_NO_NULLS: Sloupec nemůže obsahovat NULL hodnoty.
- SQL_NULLABLE: Sloupec může obsahovat NULL hodnoty
PartitionByNumber Vstup Hodnota, která označuje index tohoto sloupce v posloupnosti @input_data_1_partition_by_columns v sp_execute_external_script. Sloupce jsou číslovány postupně v rostoucím pořadí začínající na 0. Pokud tento sloupec není zahrnut v sekvenci, hodnota je -1
OrderByNumber Vstup Hodnota, která označuje index tohoto sloupce v posloupnosti @input_data_1_order_by_columns v sp_execute_external_script. Sloupce jsou číslovány postupně v rostoucím pořadí začínající na 0. Pokud tento sloupec není zahrnut v sekvenci, hodnota je -1

InitParam

Inicializujte informace týkající se daného vstupního parametru pro konkrétní relaci.

Tato funkce se volá pro každý parametr z @paramssp_execute_external_script.

Syntax

SQLRETURN InitParam(
    SQLGUID      SessionId,
    SQLUSMALLINT TaskId,
    SQLUSMALLINT ParamNumber,
    SQLCHAR*     ParamName,
    SQLSMALLINT  ParamNameLength,
    SQLSMALLINT  DataType,
    SQLULEN      ParamSize,
    SQLSMALLINT  DecimalDigits,
    SQLPOINTER   ParamValue,
    SQLINTEGER   StrLen_or_Ind,
    SQLSMALLINT  InputOutputType
);

Arguments

Argument Vstup/výstup Description
SessionId Vstup GUID jedinečně identifikuje tuto skriptovou relaci
TaskId Vstup Celé číslo, které jednoznačně identifikuje tento proces vykonání.

Když @parallel je 1 v sp_execute_external_script, tato hodnota se pohybuje od 0 do stupně paralelismu dotazu
ParamNumber Vstup Celé číslo identifikující index tohoto parametru. Parametry jsou číslovány postupně v rostoucím pořadí začínající na 0
ParamName Vstup Null-ukončený UTF-8 řetězec obsahující název parametru
ParamNameLength Vstup Délka v bajtech ( ParamName s výjimkou znaku nulového ukončení)
Data type Vstup Typ ODBC C identifikující datový typ tohoto parametru
ParamSize Vstup Maximální velikost základních dat v bajtech v tomto parametru.

Pro SQL_C_CHAR, SQL_C_WCHAR a SQL_C_BINARY datové typy označují hodnoty větší než 8000, že tento parametr představuje objekty LOB a s velikostí až 2 GB
DecimalDigits Vstup Desetinné číslice podkladových dat v tomto parametru, jak jsou definovány desetinnými číslicemi
ParamValue Vstup Ukazatel na buffer obsahující hodnotu parametru
StrLen_or_Ind Vstup Celočíselná hodnota označující délku v bajtech , ParamValuenebo SQL_NULL_DATA pro označení, že data jsou NULL.

StrLen_or_Ind[col] lze ignorovat, pokud sloupec není nulovatelný a nereprezentuje jeden z následujících datových typů: SQL_C_CHAR, SQL_C_WCHAR a SQL_C_BINARY, SQL_C_NUMERIC nebo SQL_C_TYPE_TIMESTAMP. Jinak ukazuje na platné pole s RowsNumber prvky, kde každý prvek obsahuje jeho délku nebo nulová indikační data
InputOutputType Vstup Typ parametru Argument InputOutputType je jednou z následujících hodnot:

- SQL_PARAM_INPUT
- SQL_PARAM_INPUT_OUTPUT

Execute

Vykonejte to @script v sp_execute_external_script.

Tato funkce může být volána vícekrát. Jednou pro každý steam chunk a pro každou partition v @input_data_1_partition_by_columnsin sp_execute_external_script.

Syntax

SQLRETURN Execute(
    SQLGUID         SessionId,
    SQLUSMALLINT    TaskId,
    SQLULEN         RowsNumber,
    SQLPOINTER*     Data,
    SQLINTEGER**    StrLen_or_Ind,
    SQLUSMALLINT*   OutputSchemaColumnsNumber
);

Arguments

Argument Vstup/výstup Description
SessionId Vstup GUID jedinečně identifikuje tuto skriptovou relaci
TaskId Vstup Celé číslo, které jednoznačně identifikuje tento proces vykonání.

Když @parallel je 1 v sp_execute_external_script, tato hodnota se pohybuje od 0 do stupně paralelismu dotazu
RowsNumber Vstup Počet řádků v Data
Data Vstup Dvourozměrné pole, které obsahuje množinu výsledků v @input_data_1sp_execute_external_script.

Celkový počet sloupců je InputSchemaColumnsNumber ten, který byl přijat během hovoru InitSession . Každý sloupec obsahuje RowsNumber prvky, které by měly být interpretovány podle typu sloupce z InitColumn.
Prvky, které jsou uvedeny jako NULLStrLen_or_Ind součástí, nejsou zaručeně platné a měly by být ignorovány
StrLen_or_Ind Vstup Dvourozměrné pole, které obsahuje indikátor délky/NULL pro každou hodnotu v .Data Možné hodnoty každé buňky:

- n, kde n > 0. Označení délky dat v bajtech
- SQL_NULL_DATA, označující hodnotu NULL .
Celkový počet sloupců je InputSchemaColumnsNumber ten, který byl přijat během hovoru InitSession . Každý sloupec obsahuje RowsNumber prvky, které by měly být interpretovány podle typu sloupce z InitColumn.
StrLen_or_Ind[col] lze ignorovat, pokud jeden sloupec není nulovatelný a nereprezentuje jeden z následujících datových typů: SQL_C_CHAR, SQL_C_WCHAR a SQL_C_BINARY, SQL_C_NUMERIC nebo SQL_C_TYPE_TIMESTAMP. Jinak ukazuje na platné pole s RowsNumber prvky, každý prvek obsahuje jeho délku nebo nulová indikační data
OutputSchemaColumnsNumber Výstup Ukazatel na buffer, do kterého se vrátí počet sloupců v očekávané množině výsledků v @scriptsp_execute_external_script

GetResultColumn

Získejte informace o daném výstupním sloupci pro konkrétní relaci.

Tato funkce se volá pro každý sloupec ve výsledné množině z @scriptv sp_execute_external_script.

Sloupcová struktura této množiny výsledků se nazývá výstupní schéma.

Syntax

SQLRETURN GetResultColumn(
    SQLGUID         SessionId,
    SQLUSMALLINT    TaskId,
    SQLUSMALLINT    ColumnNumber,
    SQLSMALLINT*    DataType,
    SQLINTEGER*     ColumnSize,
    SQLSMALLINT*    DecimalDigits,
    SQLSMALLINT*    Nullable
);

Arguments

Argument Vstup/výstup Description
SessionId Vstup GUID jedinečně identifikuje tuto skriptovou relaci
TaskId Vstup Celé číslo, které jednoznačně identifikuje tento proces vykonání.

Když @parallel je 1 v sp_execute_external_script, tato hodnota se pohybuje od 0 do stupně paralelismu dotazu
ColumnNumber Vstup Celé číslo identifikující index tohoto sloupce ve výstupním schématu. Sloupce jsou číslovány postupně v rostoucím pořadí začínajícím na 0
Data type Výstup Ukazatel na buffer, který obsahuje typ ODBC C identifikující datový typ tohoto sloupce
ColumnSize Výstup Ukazatel na buffer, který obsahuje maximální velikost v bajtech podkladových dat v tomto sloupci
DecimalDigits Výstup Ukazatel na buffer, který obsahuje desetinné číslice podkladových dat v tomto sloupci, jak je definováno desetinnými číslicemi. Pokud nelze určit počet desetinných číslic nebo není použitelný, hodnota se vynechá
Nullable Výstup Ukazatel na buffer, který obsahuje hodnotu, která indikuje, zda tento sloupec může obsahovat NULL hodnoty. Možné hodnoty:

- SQL_NO_NULLS: Sloupec nemůže obsahovat NULL hodnoty.
- SQL_NULLABLE: Sloupec může obsahovat NULL hodnoty.
Pokud jsou předány jiné hodnoty, vykonání se zastaví

GetResults

Získejte množinu výsledků vykonáním @script v sp_execute_external_script.

Tato funkce může být volána vícekrát. Jednou pro každý steam chunk a pro každou partition v @input_data_1_partition_by_columnsin sp_execute_external_script.

Syntax

SQLRETURN GetResults(
    SQLGUID         SessionId,
    SQLUSMALLINT    TaskId,
    SQLULEN*        RowsNumber,
    SQLPOINTER**    Data,
    SQLINTEGER***   StrLen_or_Ind
);

Arguments

Argument Vstup/výstup Description
SessionId Vstup GUID jedinečně identifikuje tuto skriptovou relaci
TaskId Vstup Celé číslo, které jednoznačně identifikuje tento proces vykonání.

Když @parallel je 1 v sp_execute_external_script, tato hodnota se pohybuje od 0 do stupně paralelismu dotazu
RowsNumber Výstup Ukazatel na buffer, který obsahuje počet řádků v Data
Data Výstup Ukazatel na dvourozměrné pole přidělené rozšířením, které obsahuje množinu výsledků v @scriptsp_execute_external_script.

Celkový počet sloupců by měl být OutputSchemaColumnsNumber ten, který byl získán ve volání Execut . Každý sloupec by měl obsahovat RowsNumber prvky, které mají být interpretovány podle typu sloupce z GetResultColumn
StrLen_or_Ind Výstup Ukazatel na dvourozměrné pole přidělené rozšířením, které obsahuje indikátor délky/NULL pro každou hodnotu v Data. Možné hodnoty každé buňky:

- n, kde n > 0. Označení délky dat v bajtech
- SQL_NULL_DATA, označující hodnotu NULL .
Celkový počet sloupců by měl být OutputSchemaColumnsNumber ten, který byl přijat při volání Execute (Execute call). Každý sloupec obsahuje RowsNumber prvky, které by měly být interpretovány podle typu sloupce z GetResultColumn.
StrLen_or_Ind[col] je ignorován, pokud jeden sloupec není nulovatelný a nereprezentuje jeden z následujících datových typů: SQL_C_CHAR, SQL_C_WCHAR a SQL_C_BINARY[add dates]. Jinak ukazuje na platné pole s RowsNumber prvky, každý prvek obsahuje jeho délku nebo nulová indikační data

GetOutputParam

Získejte informace o daném výstupním parametru pro konkrétní relaci.

Tato funkce se volá pro každý parametr z @params v sp_execute_external_script označený .OUTPUT

Syntax

SQLRETURN GetOutputParam(
    SQLGUID        SessionId,
    SQLUSMALLINT   ParamNumber,
    SQLPOINTER*    ParamValue,
    SQLINTEGER*    StrLen_or_Ind
);

Arguments

Argument Vstup/výstup Description
SessionId Vstup GUID jedinečně identifikuje tuto skriptovou relaci
ParamValue Výstup Ukazatel na buffer obsahující hodnotu parametru
StrLen_or_Ind Výstup Ukazatel na buffer, který obsahuje celočíselnou hodnotu označující délku v bajtech , ParamValuenebo SQL_NULL_DATA označující, že data jsou NULL

GetInterfaceVersion

Získejte verzi rozhraní.

Tato funkce vrací celé číslo představující verzi rozhraní rozšíření.

Podporované hodnoty:

  1. Verze 1 je počáteční verze API. Podporováno na SQL Server 2019 (15.x) RTM.
  2. Verze 2 přidala podporu pro InstallExternalLibrary API UninstallExternalLibrary a je podporována od SQL Server 2019 (15.x) CU 3.

Syntax

SQLUSMALLINT GetInterfaceVersion();

CleanupSession

Ukliďte informace z jednotlivých sezení.

Syntax

SQLRETURN CleanupSession(
    SQLGUID        SessionId,
    SQLUSMALLINT   TaskId
);

Arguments

Argument Vstup/výstup Description
SessionId Vstup GUID jedinečně identifikuje tuto skriptovou relaci
TaskId Vstup Celé číslo, které jednoznačně identifikuje tento proces vykonání.

Když @parallel je 1 v sp_execute_external_script, tato hodnota se pohybuje od 0 do stupně paralelismu dotazu

Cleanup

Vyčistit globální, sdílené informace (například JVM).

Syntax

SQLRETURN Cleanup();

GetTelemetryResults

Získává telemetrická data (páry klíč-hodnota) z rozšíření. Funkce je volitelná a nevyžaduje implementaci. Telemetrie je zpřístupněna dm_db_external_script_execution_stats dynamickým správcovým zobrazením (DMV).

Existuje čítač jménem script_executions, který posílá framework. Příponka by tento název používat neměla.

Každý záznam v telemetrii je pár klíč-hodnota. Klíče jsou struny. Hodnoty jsou 64bitová celá čísla, tedy čítače. Výstup tedy obsahuje dvě logická pole: názvy a jejich odpovídající čítače. Každé pole je výstupem.

Délka každého pole je , RowsNumbercož je výstup. První logický výstup obsahuje ukazatele na řetězce. Je reprezentován dvěma poli: CounterNames (skutečná data řetězce) a CounterNamesLength (délka každého řetězce). Druhý logický výstup je uložen v ukazateli CounterValues .

Syntax

SQLRETURN GetTelemetryResults(
    SQLGUID        SessionId,
    SQLUSMALLINT   TaskId,
    SQLUINTEGER    *RowsNumber,
    SQLCHAR        ***CounterNames,
    SQLINTEGER     **CounterNamesLength,
    SQLBIGINT      **CounterValues
);

Arguments

Argument Vstup/výstup Description
SessionId Vstup GUID jedinečně identifikuje tuto skriptovou relaci
TaskId Vstup Celé číslo, které jednoznačně identifikuje tento proces vykonání.

Když @parallel je 1 v sp_execute_external_script, tato hodnota se pohybuje od 0 do stupně paralelismu dotazu
RowsNumber Výstup Počet párů klíč-hodnota
CounterNames Výstup Řetězcová data obsahující klíče
CounterNamesLength Výstup Délka každé klávesové struny
CounterValues Výstup 64bitová celočíselná data obsahující hodnoty

InstallExternalLibrary

Nainstaluje knihovnu. Funkce je volitelná a nevyžaduje implementaci. Výchozí implementace je zkopírovat obsah knihovny (viz CREATE EXTERNAL LIBRARY) do souboru na správném místě. Název souboru je název knihovny.

Syntax

SQLRETURN InstallExternalLibrary(
    SQLGUID    SetupSessionId,
    SQLCHAR    *LibraryName,
    SQLINTEGER LibraryNameLength,
    SQLCHAR    *LibraryFile,
    SQLINTEGER LibraryFileLength,
    SQLCHAR    *LibraryInstallDirectory,
    SQLINTEGER LibraryInstallDirectoryLength,
    SQLCHAR    **LibraryError,
    SQLINTEGER *LibraryErrorLength
);

Arguments

Argument Vstup/výstup Description
SetupSessionId Vstup GUID jedinečně identifikuje tuto skriptovou relaci
LibraryName Vstup Název knihovny
LibraryNameLength Vstup Délka názvu knihovny
LibraryFile Vstup Cesta (jako řetězec) k souboru knihovny obsahujícímu binární obsah specifikovaný CREATE EXTERNAL LIBRARY
LibraryFileLength Vstup Délka provazu LibraryFile
LibraryInstallDirectory Vstup Kořenový adresář pro instalaci knihovny
LibraryInstallDirectoryLength Vstup Délka provazu LibraryInstallDirectory
LibraryError Výstup Volitelný výstupní parametr. Pokud při instalaci knihovny dojde k chybě, LibraryError ukazuje na řetězec popisující chybu
LibraryErrorLength Výstup Délka provazu LibraryError

UninstallExternalLibrary

Odinstaluje knihovnu. Funkce je volitelná a nevyžaduje implementaci. Výchozí implementací je zrušit práci vykonanou výchozí implementací .InstallExternalLibrary Výchozí implementace maže obsah LibraryName souboru pod .LibraryInstallDirectory

Syntax

SQLRETURN UninstallExternalLibrary(
    SQLGUID    SetupSessionId,
    SQLCHAR    *LibraryName,
    SQLINTEGER LibraryNameLength,
    SQLCHAR    *LibraryInstallDirectory,
    SQLINTEGER LibraryInstallDirectoryLength,
    SQLCHAR    **LibraryError,
    SQLINTEGER *LibraryErrorLength
);

Arguments

Argument Vstup/výstup Description
SetupSessionId Vstup GUID jedinečně identifikuje tuto skriptovou relaci
LibraryName Vstup Název knihovny
LibraryNameLength Vstup Délka názvu knihovny
LibraryFile Vstup Cesta (jako řetězec) k souboru knihovny obsahujícímu binární obsah specifikovaný CREATE EXTERNAL LIBRARY
LibraryFileLength Vstup Délka provazu LibraryFile
LibraryInstallDirectory Vstup Kořenový adresář pro instalaci knihovny
LibraryInstallDirectoryLength Vstup Délka provazu LibraryInstallDirectory
LibraryError Výstup Chybový řetězec knihovny
LibraryErrorLength Výstup Délka provazu LibraryError