sp_invoke_external_rest_endpoint (Transact-SQL)
platí pro:databáze AZURE SQL DatabaseSQL v Microsoft Fabric
Uložená procedura sp_invoke_external_rest_endpoint
vyvolá koncový bod REST HTTPS zadaný jako vstupní argument procedury.
Syntax
EXEC @returnValue = sp_invoke_external_rest_endpoint
[ @url = ] N'url'
[ , [ @payload = ] N'request_payload' ]
[ , [ @headers = ] N'http_headers_as_json_array' ]
[ , [ @method = ] 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' ]
[ , [ @timeout = ] seconds ]
[ , [ @credential = ] credential ]
[ , @response OUTPUT ]
Argumenty
[ @url = ] N'url'
Adresa URL koncového bodu HTTPS REST, který se má volat. @url je nvarchar(4000) bez výchozího nastavení.
[ @payload = ] N'request_payload'
Řetězec Unicode ve formátu JSON, XML nebo TEXT, který obsahuje datovou část pro odeslání do koncového bodu REST HTTPS. Datové části musí být platný dokument JSON, dokument XML ve správném formátu nebo text. @payload je nvarchar(max) bez výchozího nastavení.
[ @headers = ] HlavičkyN
Hlavičky, které se musí odeslat jako součást požadavku do koncového bodu REST HTTPS. Hlavičky musí být zadány pomocí plochého formátu JSON (dokument JSON bez vnořených struktur). Hlavičky definované v seznamu Název zakázaných hlaviček budou ignorovány, i když explicitně předané v parametru @headers; jejich hodnoty budou při spuštění požadavku HTTPS zahozeny nebo nahrazeny hodnotami zadanými systémem.
Parametr @headers je nvarchar(4000) bez výchozího nastavení.
[ @method = ] N' metoda'
Metoda HTTP pro volání adresy URL. Musí to být jedna z následujících hodnot: GET
, POST
, PUT
, PATCH
, DELETE
, HEAD
.
@method je nvarchar(6) s POST
jako výchozí hodnotou.
[ @timeout = ] sekund
Doba v sekundách povolená pro spuštění volání HTTPS Pokud se během definovaného časového limitu v sekundách nedá odeslat a přijímat úplné požadavky HTTP a odpověď, zastaví se spuštění uložené procedury a vyvolá se výjimka. Časový limit začíná, když se spustí připojení HTTP a skončí, když byla přijata odpověď a datová část zahrnutá, pokud existuje. @timeout je pozitivní smallint s výchozí hodnotou 30. Přijaté hodnoty: 1 až 230.
[ @credential = ] přihlašovacích údajů
Určuje, který objekt CREDENTIAL OBORU DATABÁZE se používá k vložení ověřovacích údajů do požadavku HTTPS. @credential je sysname bez výchozí hodnoty.
výstup @response
Povolte předání odpovědi přijaté z volané koncového bodu do zadané proměnné. @response je nvarchar(max).
Návratová hodnota
Provedení vrátí 0
, pokud bylo volání HTTPS provedeno a přijatý stavový kód HTTP je stavový kód 2xx (Success
). Pokud přijatý stavový kód HTTP není v rozsahu 2xx, návratová hodnota bude přijatý stavový kód HTTP. Pokud volání HTTPS nejde vůbec provést, vyvolá se výjimka.
Dovolení
Vyžaduje spuštění libovolného oprávnění k databázi EXTERNÍHO KONCOVÉHO BODU.
Například:
GRANT EXECUTE ANY EXTERNAL ENDPOINT TO [<PRINCIPAL>];
Formát odpovědi
Odpověď volání HTTP a výsledná data odesílaná zpět vyvolaný koncový bod jsou k dispozici prostřednictvím výstupního parametru @response. @response může obsahovat dokument JSON s následujícím schématem:
{
"response": {
"status": {
"http": {
"code": "",
"description": ""
}
},
"headers": {}
},
"result": {}
}
Specificky:
- odpověď: objekt JSON, který obsahuje výsledek HTTP a další metadata odpovědi.
-
výsledek: datová část JSON vrácená voláním HTTP. Vynechá se, pokud je přijatý výsledek HTTP 204 (
No Content
).
Nebo @response může obsahovat dokument XML s následujícím schématem:
<output>
<response>
<status>
<http code="" description=" " />
</status>
<headers>
<header key="" value="" />
<header key="" value="" />
</headers>
</response>
<result>
</result>
</output>
Specificky:
- odpověď: objekt XML, který obsahuje výsledek HTTP a další metadata odpovědi.
-
výsledek: datová část XML vrácená voláním HTTP. Vynechá se, pokud je přijatý výsledek HTTP 204 (
No Content
).
V response
části se kromě stavového kódu a popisu HTTP zobrazí celá sada přijatých hlaviček odpovědi v headers
objektu. Následující příklad ukazuje oddíl response
ve formátu JSON (také struktura pro textové odpovědi):
"response": {
"status": {
"http": {
"code": 200,
"description": "OK"
}
},
"headers": {
"Date": "Thu, 08 Sep 2022 21:51:22 GMT",
"Content-Length": "1345",
"Content-Type": "application\/json; charset=utf-8",
"Server": "Kestrel",
"Strict-Transport-Security": "max-age=31536000; includeSubDomains"
}
}
Následující příklad ukazuje oddíl response
v jazyce XML:
<response>
<status>
<http code="200" description="OK" />
</status>
<headers>
<header key="Date" value="Tue, 01 Apr 1976 21:12:04 GMT" />
<header key="Content-Length" value="2112" />
<header key="Content-Type" value="application/xml" />
<header key="Server" value="Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" />
<header key="x-ms-request-id" value="31536000-64bi-64bi-64bi-31536000" />
<header key="x-ms-version" value="2021-10-04" />
<header key="x-ms-creation-time" value="Wed, 19 Apr 2023 22:17:33 GMT" />
<header key="x-ms-server-encrypted" value="true" />
</headers>
</response>
Povolené koncové body
Jsou povolena pouze volání koncových bodů v následujících službách:
Služba Azure | Doména |
---|---|
Azure Functions | *.azurewebsites.net |
Služba Azure Apps | *.azurewebsites.net |
Azure App Service Environment | *.appserviceenvironment.net |
Azure Static Web Apps | *.azurestaticapps.net |
Azure Logic Apps | *.logic.azure.com |
Azure Event Hubs | *.servicebus.windows.net |
Azure Event Grid | *.eventgrid.azure.net |
Azure Cognitive Services | *.cognitiveservices.azure.com |
Azure OpenAI | *.openai.azure.com |
PowerApps / Dataverse | *.api.crm.dynamics.com |
Microsoft Dynamics | *.dynamics.com |
Azure Container Instances | *.azurecontainer.io |
Azure Container Apps | *.azurecontainerapps.io |
Power BI | api.powerbi.com |
Microsoft Graph | graph.microsoft.com |
Analysis Services | *.asazure.windows.net |
IoT Central | *.azureiotcentral.com |
API Management | *.azure-api.net |
Azure Blob Storage | *.blob.core.windows.net |
Soubory Azure | *.file.core.windows.net |
Azure Queue Storage | *.queue.core.windows.net |
Azure Table Storage | *.table.core.windows.net |
Azure Communication Services | *.communications.azure.com |
Vyhledávání Bingem | api.bing.microsoft.com |
Azure Key Vault | *.vault.azure.net |
Azure AI Search | *.search.windows.net |
Azure Maps | *.atlas.microsoft.com |
Azure AI Translator | api.cognitive.microsofttranslator.com |
pravidla odchozí brány firewall pro službu Azure SQL Database a Azure Synapse Analytics kontrolní mechanismus je možné použít k dalšímu omezení odchozího přístupu k externím koncovým bodům.
Poznámka
Pokud chcete vyvolat službu REST, která není v seznamu povolených, můžete pomocí služby API Management bezpečně zveřejnit požadovanou službu a zpřístupnit ji sp_invoke_external_rest_endpoint
.
Hranice
Velikost datové části
Datová část, při přijetí i při odeslání, má kódování UTF-8 při odesílání přes drát. V takovém formátu je jeho velikost omezená na 100 MB.
Délka adresy URL
Maximální délka adresy URL (vygenerovaná po použití parametru @url a přidání zadaných přihlašovacích údajů do řetězce dotazu( pokud existuje) je 8 kB; Maximální délka řetězce dotazu (řetězec dotazu + řetězec dotazu) je 4 kB.
Velikost záhlaví
Maximální velikost hlavičky požadavku a odpovědi (všechna pole hlaviček: hlavičky předávané prostřednictvím @headers parametru + hlavičky přihlašovacích údajů + systémové hlavičky) je 8 kB.
Škrcení
Počet souběžných připojení k externím koncovým bodům provedeným prostřednictvím sp_invoke_external_rest_endpoint
je omezený na 10% pracovních vláken s maximálně 150 pracovními procesy. U jednoúčelové databáze omezování se vynucuje na úrovni databáze, zatímco u elastického fondu se omezování vynucuje na úrovni databáze i na úrovni fondu.
Pokud chcete zkontrolovat, kolik souběžných připojení může databáze udržovat, spusťte následující dotaz:
SELECT
[database_name],
DATABASEPROPERTYEX(DB_NAME(), 'ServiceObjective') AS service_level_objective,
[slo_name] as service_level_objective_long,
[primary_group_max_outbound_connection_workers] AS max_database_outbound_connection,
[primary_pool_max_outbound_connection_workers] AS max_pool_outbound_connection
FROM
sys.dm_user_db_resource_governance
WHERE
database_id = DB_ID();
Pokud se při dosažení maximálního počtu souběžných připojení pokusí nové připojení k externímu koncovému bodu pomocí sp_invoke_external_rest_endpoint
, vyvolá se chyba 10928 (nebo 10936, pokud jste dosáhli limitů elastických fondů). Například:
Msg 10928, Level 16, State 4, Procedure sys.sp_invoke_external_rest_endpoint_internal, Line 1 [Batch Start Line 0]
Resource ID : 1. The outbound connections limit for the database is 20 and has been reached.
See 'https://docs.microsoft.com/azure/azure-sql/database/resource-limits-logical-server' for assistance.
Pověření
Některé koncové body REST vyžadují ověření, aby se správně vyvolalo. Ověřování je obvykle možné provést předáním některých párů klíč-hodnota v řetězci dotazu nebo v hlavičkách HTTP nastavených pomocí požadavku.
K bezpečnému ukládání ověřovacích dat (jako je například nosný token) sp_invoke_external_rest_endpoint
k volání chráněného koncového bodu je možné použít PŘIHLAŠOVACÍ ÚDAJE S OBOREM DATABÁZE. Při vytváření POVĚŘENÍ SCOPED DATABASE použijte parametr IDENTITY k určení, jaká ověřovací data se předají do vyvolaného koncového bodu a jak. IDENTITa podporuje čtyři možnosti:
: Odeslání zadaných ověřovacích dat pomocí hlaviček požadavků : Odeslání zadaných ověřovacích dat pomocí řetězce dotazu -
Managed Identity
: Pomocí hlaviček požadavku odešlete spravovanou identitu přiřazenou systémem . -
Shared Access Signature
: poskytnutí omezeného delegovaného přístupu k prostředkům prostřednictvím podepsané adresy URL (označované také jako SAS)
Vytvořený PARAMETR DATABASE SCOPED CREDENTIAL lze použít prostřednictvím parametru @credential:
EXEC sp_invoke_external_rest_endpoint
@url = N'https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?key1=value1',
@credential = [https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>]
-
hlaviček požadavků
-
řetězce dotazu
- spravované identity
S touto hodnotou IDENTITY se přihlašovací údaje DATABASE SCOPED přidají do hlaviček požadavku. Dvojice klíč-hodnota obsahující ověřovací informace musí být poskytována prostřednictvím parametru SECRET pomocí plochého formátu JSON. Například:
CREATE DATABASE SCOPED CREDENTIAL [https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>]
WITH IDENTITY = 'HTTPEndpointHeaders', SECRET = '{"x-functions-key":"<your-function-key-here>"}';
Pravidla názvu přihlašovacích údajů
Vytvořené POVĚŘENÍ DATABASE SCOPED MUSÍ dodržovat konkrétní pravidla, aby bylo možné je používat s sp_invoke_external_rest_endpoint
. Pravidla jsou následující:
- Musí to být platná adresa URL.
- Doména adresy URL musí být jednou z těchto domén zahrnutých v seznamu povolených.
- Adresa URL nesmí obsahovat řetězec dotazu.
- Protokol + plně kvalifikovaný název domény (FQDN) volané adresy URL se musí shodovat s protokolem a plně kvalifikovaným názvem domény názvu přihlašovacích údajů.
- Každá část pojmenované cesty URL se musí zcela shodovat s odpovídající částí cesty URL v názvu přihlašovacích údajů.
- Přihlašovací údaje musí odkazovat na cestu, která je obecnější než adresa URL požadavku. Například přihlašovací údaje vytvořené pro cestu
https://northwind.azurewebsite.net/customers
nejde použít pro adresu URLhttps://northwind.azurewebsite.net
Pravidla kolace a názvu přihlašovacích údajů
RFC 3986 Oddíl 6.2.2.1 uvádí, že "Pokud identifikátor URI používá součásti obecné syntaxe, pravidla ekvivalence syntaxe součástí vždy platí; a sice, že režim a hostitel nerozlišují malá a velká písmena" a RFC 7230 Oddíl 2.7.3 uvádí, že "všechny ostatní se porovnávají způsobem citlivým na malá a velká písmena".
Vzhledem k tomu, že na úrovni databáze existuje sada pravidel kolace, použije se následující logika, která bude koherentní s pravidlem kolace databáze a výše uvedeným dokumentem RFC. (Popsané pravidlo může být potenciálně více omezující než pravidla RFC, například pokud je databáze nastavena tak, aby používala kolaci s rozlišováním velkých a malých písmen.):
- Pomocí dokumentu RFC zkontrolujte, jestli se adresa URL a přihlašovací údaje shodují. To znamená:
- Zkontrolujte schéma a hostitele pomocí kolace nerozlišující malá a velká písmena (
Latin1_General_100_CI_AS_KS_WS_SC
). - Zkontrolujte porovnání všech ostatních segmentů adresy URL v kolaci s rozlišováním velkých a malých písmen (
Latin1_General_100_BIN2
).
- Zkontrolujte schéma a hostitele pomocí kolace nerozlišující malá a velká písmena (
- Pomocí pravidel kolace databáze (a bez kódování adresy URL) zkontrolujte, jestli se adresa URL a přihlašovací údaje shodují.
Udělení oprávnění k používání přihlašovacích údajů
Uživatelé databáze, kteří přistupují k přihlašovacím údajům OBORU DATABÁZE, musí mít oprávnění k použití tohoto pověření.
Aby mohl uživatel databáze používat přihlašovací údaje, musí mít oprávnění REFERENCES
ke konkrétním přihlašovacím údajům:
GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[<CREDENTIAL_NAME>] TO [<PRINCIPAL>];
Poznámky
Typ čekání
Když sp_invoke_external_rest_endpoint
čeká na dokončení volání vyvolané služby, nahlásí HTTP_EXTERNAL_CONNECTION typ čekání.
HTTPS a TLS
Podporují se jenom koncové body, které jsou nakonfigurované tak, aby používaly protokol HTTPS s šifrovacím protokolem TLS.
Přesměrování HTTP
sp_invoke_external_rest_endpoint
nebude automaticky sledovat žádné přesměrování HTTP přijaté jako odpověď z vyvolané koncového bodu.
Hlavičky HTTP
sp_invoke_external_rest_endpoint
automaticky vloží do požadavku HTTP následující hlavičky:
-
typu obsahu: je nastavená na
application/json; charset=utf-8
-
přijmout: nastaveno na
application/json
-
uživatelského agenta: nastavte
<EDITION>/<PRODUCT VERSION>
například:SQL Azure/12.0.2000.8
I když se uživatelského agenta vždy přepíšou uloženou procedurou, typ obsahu a přijímat hodnoty hlaviček mohou být uživatelem definované pomocí parametru @headers. V typu obsahu je povolena pouze direktiva typu média a zadání direktiv charset nebo hranic není možné.
Podporovaná datová část požadavku a odpovědi typů médií
Níže jsou přijaty hodnoty hlavičky typ obsahu.
- application/json
- application/vnd.microsoft.*.json
- application/xml
- application/vnd.microsoft.*.xml
- application/vnd.microsoft.*+xml
- application/x-www-form-urlencoded
- Text/*
Pro přijmout záhlaví jsou následující hodnoty.
- application/json
- application/xml
- Text/*
Další informace o typech záhlaví textu najdete v registru textového typu na adrese IANA.
Poznámka
Pokud testujete vyvolání koncového bodu REST s jinými nástroji, například cURL nebo jakéhokoli moderního klienta REST, jako je režimu spánku , nezapomeňte zahrnout stejné hlavičky, které se automaticky vloží sp_invoke_external_rest_endpoint
, aby měly stejné chování a výsledky.
Osvědčené postupy
Použití techniky dávkování
Pokud potřebujete odeslat sadu řádků do koncového bodu REST, například do funkce Azure Nebo do centra událostí, doporučujeme řádky dávkovat do jednoho dokumentu JSON, aby se zabránilo režii volání HTTPS pro každý řádek odesílaný. Můžete to provést pomocí příkazu FOR JSON
, například:
-- create the payload
DECLARE @payload AS NVARCHAR(MAX);
SET @payload = (
SELECT [object_id], [name], [column_id]
FROM sys.columns
FOR JSON AUTO
);
-- invoke the REST endpoint
DECLARE @retcode INT,
@response AS NVARCHAR(MAX);
EXEC @retcode = sp_invoke_external_rest_endpoint @url = '<REST_endpoint>',
@payload = @payload,
@response = @response OUTPUT;
-- return the result
SELECT @retcode, @response;
Příklady
Tady najdete několik příkladů použití sp_invoke_external_rest_endpoint
k integraci s běžnými službami Azure, jako jsou Azure Functions nebo Azure Event Hubs. Další ukázky pro integraci s dalšími službami najdete na GitHubu .
A. Volání funkce Azure Functions pomocí vazby triggeru HTTP bez ověřování
Následující příklad volá funkci Azure Functions pomocí vazby triggeru HTTP umožňující anonymní přístup.
DECLARE @ret INT, @response NVARCHAR(MAX);
EXEC @ret = sp_invoke_external_rest_endpoint
@url = N'https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?key1=value1',
@headers = N'{"header1":"value_a", "header2":"value2", "header1":"value_b"}',
@payload = N'{"some":{"data":"here"}}',
@response = @response OUTPUT;
SELECT @ret AS ReturnCode, @response AS Response;
B. Volání funkce Azure Functions pomocí vazby triggeru HTTP s autorizačním klíčem
Následující příklad volá funkci Azure Functions pomocí vazby triggeru HTTP nakonfigurované tak, aby vyžadovala autorizační klíč. Autorizační klíč se předá v hlavičce x-function-key
podle požadavků služby Azure Functions. Další informace najdete v tématu Azure Functions – autorizace klíče rozhraní API.
CREATE DATABASE SCOPED CREDENTIAL [https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>]
WITH IDENTITY = 'HTTPEndpointHeaders', SECRET = '{"x-functions-key":"<your-function-key-here>"}';
DECLARE @ret INT, @response NVARCHAR(MAX);
EXEC @ret = sp_invoke_external_rest_endpoint
@url = N'https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?key1=value1',
@headers = N'{"header1":"value_a", "header2":"value2", "header1":"value_b"}',
@credential = [https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>],
@payload = N'{"some":{"data":"here"}}',
@response = @response OUTPUT;
SELECT @ret AS ReturnCode, @response AS Response;
C. Čtení obsahu souboru ze služby Azure Blob Storage pomocí tokenu SAS
Tento příklad načte soubor ze služby Azure Blob Storage pomocí tokenu SAS pro ověřování. Výsledky se vrátí ve formátu XML, takže bude potřeba použít hlavičku "Accept":"application/xml"
.
DECLARE @ret INT, @response NVARCHAR(MAX);
EXEC @ret = sp_invoke_external_rest_endpoint
@url = N'https://blobby.blob.core.windows.net/datafiles/my_favorite_blobs.txt?sp=r&st=2023-07-28T19:56:07Z&se=2023-07-29T03:56:07Z&spr=https&sv=2022-11-02&sr=b&sig=XXXXXX1234XXXXXX6789XXXXX',
@headers = N'{"Accept":"application/xml"}',
@method = 'GET',
@response = @response OUTPUT;
SELECT @ret AS ReturnCode, @response AS Response;
D. Odeslání zprávy do centra událostí pomocí spravované identity Azure SQL Database
Tato ukázka ukazuje, jak můžete odesílat zprávy do služby Event Hubs pomocí spravované identity Azure SQL. Ujistěte se, že jste nakonfigurovali spravovanou identitu systému
az sql server update -g <resource-group> -n <azure-sql-server> --identity-type SystemAssigned
Potom nakonfigurujte službu Event Hubs tak, aby spravovaná identita Azure SQL Serveru mohla odesílat zprávy (role Odesílatel dat služby Azure Event Hubs) do požadovaného centra událostí. Další informace najdete v tématu Použití služby Event Hubs se spravovanými identitami.
Jakmile to uděláte, můžete použít název Managed Identity
identity při definování přihlašovacích údajů s oborem databáze, které budou používány sp_invoke_external_rest_endpoint
. Jak je vysvětleno v Ověření aplikace pomocí ID Microsoft Entra pro přístup k prostředkům služby Event Hubs, název prostředku (nebo ID), který se má použít při použití ověřování Microsoft Entra, je https://eventhubs.azure.net
:
CREATE DATABASE SCOPED CREDENTIAL [https://<EVENT-HUBS-NAME>.servicebus.windows.net]
WITH IDENTITY = 'Managed Identity',
SECRET = '{"resourceid": "https://eventhubs.azure.net"}';
GO
DECLARE @Id UNIQUEIDENTIFIER = NEWID();
DECLARE @payload NVARCHAR(MAX) = (
SELECT *
FROM (
VALUES (@Id, 'John', 'Doe')
) AS UserTable(UserId, FirstName, LastName)
FOR JSON AUTO,
WITHOUT_ARRAY_WRAPPER
)
DECLARE @url NVARCHAR(4000) = 'https://<EVENT-HUBS-NAME>.servicebus.windows.net/from-sql/messages';
DECLARE @headers NVARCHAR(4000) = N'{"BrokerProperties": "' + STRING_ESCAPE('{"PartitionKey": "' + CAST(@Id AS NVARCHAR(36)) + '"}', 'json') + '"}'
DECLARE @ret INT, @response NVARCHAR(MAX);
EXEC @ret = sp_invoke_external_rest_endpoint @url = @url,
@headers = @headers,
@credential = [https://<EVENT-HUBS-NAME>.servicebus.windows.net],
@payload = @payload,
@response = @response OUTPUT;
SELECT @ret AS ReturnCode, @response AS Response;
E. Čtení a zápis souboru do služby Azure File Storage s přihlašovacími údaji s vymezeným oborem služby Azure SQL Database
Tento příklad zapíše soubor do služby Azure File Storage pomocí přihlašovacích údajů s vymezeným oborem služby Azure SQL Database pro ověřování a vrátí obsah. Výsledky se vrátí ve formátu XML, takže bude potřeba použít hlavičku "Accept":"application/xml"
.
Začněte vytvořením hlavního klíče pro Azure SQL Database.
create master key encryption by password = '2112templesmlm2BTS21.qwqw!@0dvd'
go
Pak vytvořte přihlašovací údaje s vymezeným oborem databáze pomocí tokenu SAS poskytnutého účtem služby Azure Blob Storage.
create database scoped credential [filestore]
with identity='SHARED ACCESS SIGNATURE',
secret='sv=2022-11-02&ss=bfqt&srt=sco&sp=seespotrun&se=2023-08-03T02:21:25Z&st=2023-08-02T18:21:25Z&spr=https&sig=WWwwWWwwWWYaKCheeseNXCCCCCCDDDDDSSSSSU%3D'
go
Dále vytvořte soubor a přidejte do něj text s následujícími dvěma příkazy:
declare @payload nvarchar(max) = (select * from (values('Hello from Azure SQL!', sysdatetime())) payload([message], [timestamp])for json auto, without_array_wrapper)
declare @response nvarchar(max), @url nvarchar(max), @headers nvarchar(1000);
declare @len int = len(@payload)
-- Create the File
set @url = 'https://myfiles.file.core.windows.net/myfiles/test-me-from-azure-sql.json'
set @headers = json_object(
'x-ms-type': 'file',
'x-ms-content-length': cast(@len as varchar(9)),
'Accept': 'application/xml')
exec sp_invoke_external_rest_endpoint
@url = @url,
@method = 'PUT',
@headers = @headers,
@credential = [filestore],
@response = @response output
select cast(@response as xml);
-- Add text to the File
set @headers = json_object(
'x-ms-range': 'bytes=0-' + cast(@len-1 as varchar(9)),
'x-ms-write': 'update',
'Accept': 'application/xml');
set @url = 'https://myfiles.file.core.windows.net/myfiles/test-me-from-azure-sql.json'
set @url += '?comp=range'
exec sp_invoke_external_rest_endpoint
@url = @url,
@method = 'PUT',
@headers = @headers,
@payload = @payload,
@credential = [filestore],
@response = @response output
select cast(@response as xml)
go
Nakonec k přečtení souboru použijte následující příkaz.
declare @response nvarchar(max);
declare @url nvarchar(max) = 'https://myfiles.file.core.windows.net/myfiles/test-me-from-azure-sql.json'
exec sp_invoke_external_rest_endpoint
@url = @url,
@headers = '{"Accept":"application/xml"}',
@credential = [filestore],
@method = 'GET',
@response = @response output
select cast(@response as xml)
go
Související obsah
- správa prostředků ve službě Azure SQL Database
- sys.dm_resource_governor_resource_pools_history_ex
- sys.dm_resource_governor_workload_groups_history_ex
- sys.dm_user_db_resource_governance
-
udělit oprávnění k databázi (Transact-SQL) - CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
-
API Management - sp_invoke_external_rest_endpoint ukázky využití