Ash*_*ore 23 sql-server stored-procedures
从asp.net Web表单调用API非常简单.
WebClient wc = new WebClient();
string urlData = wc.DownloadString("http://xxx.xxx.xx.xx/sssss/getResponse.do?ID=testing");
Run Code Online (Sandbox Code Playgroud)
但我们可以从Sql server存储过程调用API.
如果是,那么我们如何从Sql server存储过程调用API,以及如何获得API响应.
fas*_*ect 30
请参阅链接了解更多详情.
Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
Code Snippet
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get',
'http://www.webservicex.com/stockquote.asmx/GetQuote?symbol=MSFT', --Your Web Service Url (invoked)
'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
Select @ResponseText
Exec sp_OADestroy @Object
Run Code Online (Sandbox Code Playgroud)
Fra*_*ani 17
我做了很多工作,希望我的努力可以对您有所帮助。
只需将其粘贴到您的SSMS中,然后按F5:
Declare @Object as Int;
DECLARE @hr int
Declare @json as table(Json_Table nvarchar(max))
Exec @hr=sp_OACreate 'MSXML2.ServerXMLHTTP.6.0', @Object OUT;
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
Exec @hr=sp_OAMethod @Object, 'open', NULL, 'get',
'http://overpass-api.de/api/interpreter?data=[out:json];area[name=%22Auckland%22]-%3E.a;(node(area.a)[amenity=cinema];way(area.a)[amenity=cinema];rel(area.a)[amenity=cinema];);out;', --Your Web Service Url (invoked)
'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
Exec @hr=sp_OAMethod @Object, 'send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
Exec @hr=sp_OAMethod @Object, 'responseText', @json OUTPUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
INSERT into @json (Json_Table) exec sp_OAGetProperty @Object, 'responseText'
-- select the JSON string
select * from @json
-- Parse the JSON string
SELECT * FROM OPENJSON((select * from @json), N'$.elements')
WITH (
[type] nvarchar(max) N'$.type' ,
[id] nvarchar(max) N'$.id',
[lat] nvarchar(max) N'$.lat',
[lon] nvarchar(max) N'$.lon',
[amenity] nvarchar(max) N'$.tags.amenity',
[name] nvarchar(max) N'$.tags.name'
)
EXEC sp_OADestroy @Object
Run Code Online (Sandbox Code Playgroud)
该查询将为您提供3个结果:
1。万一出了什么问题,就赶上错误(不要惊慌,它总是向您显示4000个字符以上的错误,因为NVARCHAR(MAX)只能存储4000个字符)
2。将JSON放入字符串中(这就是我们想要的)
3。奖励:解析JSON并将数据很好地存储到表中(这有多酷?)
对着虚空尖叫——只是“不”不要这样做。这是一个愚蠢的想法。
与外部数据源集成是 SSIS 的用途,或者编写一个 dot net 应用程序/服务来查询框并进行 API 调用。
编写 CLR 代码以使 SQL 进程能够调用 Web 服务是一种如果做得不好可能会使 SQL 框瘫痪的事情 - 想象一下将 CLR 函数放在某个地方的视图中 - 后来其他人不知道是什么您已经完成并使用一百万行表加入该视图 - 突然您的 SQL 框正在发出一百万个单独的 webapi 调用。
整个想法是疯狂的。
这种做事是企业 DBA 不信任开发人员的原因。
CLR是那种权力很大,责任很大,以上是对它的滥用。
我认为使用这个 CLR 存储过程SQL-APIConsumer会更容易 :
exec [dbo].[APICaller_POST]
@URL = 'http://localhost:5000/api/auth/login'
,@BodyJson = '{"Username":"gdiaz","Password":"password"}'
Run Code Online (Sandbox Code Playgroud)
它有多个过程,允许您调用需要参数的 API,甚至可以传递多个标头和令牌身份验证。
| 归档时间: |
|
| 查看次数: |
75255 次 |
| 最近记录: |