使用sp_invoke_external_rest_endpoint遇域名连接限制错误求助
sp_invoke_external_rest_endpoint 使用问题解答
这个存储过程确实有用户成功使用过,但它的调用存在明确限制,你遇到的错误正是触发了这些限制导致的。
关键限制点
- 仅支持微软自家云服务域名:目前该存储过程仅允许调用微软旗下云服务的端点,比如Azure存储、Azure函数、Azure逻辑应用等,你测试的第三方公开API(如api.publicapis.org、apipheny.io)不在允许范围内,因此会返回域名不允许连接的错误。
- 必须配置外部访问策略:即便是调用微软自家服务,也需要先在SQL Server(或Azure SQL)中创建对应的外部访问策略,明确指定允许访问的具体域名,示例配置代码如下:
CREATE EXTERNAL ACCESS POLICY AllowAzureStorage WITH ( ALLOWED_RESOURCE_TYPES = (EXTERNAL_ENDPOINT), ALLOWED_LOCATIONS = ('https://yourstorageaccount.blob.core.windows.net') );
正确使用示例(以Azure函数为例)
- 先创建允许目标Azure函数域名的外部访问策略
- 执行存储过程调用:
DECLARE @ret INT, @response NVARCHAR(MAX); EXEC @ret = sp_invoke_external_rest_endpoint @method = 'POST', @url = 'https://yourfunctionapp.azurewebsites.net/api/yourfunction', @headers = '{"Content-Type": "application/json"}', @body = '{"key": "value"}', @response = @response OUTPUT; SELECT @ret AS ReturnCode, @response AS Response;
总结
这个存储过程并非用于调用任意第三方API,它的定位是SQL与微软云生态服务的集成工具,只要符合域名限制并配置好访问策略,就能正常使用。
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

