Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
- Verze 1 je počáteční verze API. Podporováno na SQL Server 2019 (15.x) RTM.
- Verze 2 přidala podporu pro
InstallExternalLibraryAPIUninstallExternalLibrarya 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 |