SQL Server - 使用虚拟CSV调用REST API
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server - 使用虚拟CSV调用REST API相关的知识,希望对你有一定的参考价值。
我有下面的代码向API
发出请求并且工作正常,使用JSON
content-type到另一个端点。
DECLARE @Object AS int;
DECLARE @ResponSEText AS Varchar(8000);
DECLARE @Token AS Varchar(8000);
DECLARE @xmltest AS Varchar(8000);
DECLARE @hResult AS int
DECLARE @source varchar(255), @desc varchar(255)
DECLARE @LocationId varchar(25);
DECLARE @Body AS varchar(8000) = '{
"UserName": "test.integration12",
"Password": "Urgent123"
}'
--EXEC sp_OACREATE 'MSXML2.XMLHTTP', @Object OUT;
EXEC sp_OACREATE 'MSXML2.ServerXMLHttp', @Object OUT;
EXEC sp_OAMethod @Object, 'open', NULL, 'POST',
'https://urgentcargus.azure-api.net/api/LoginUser', 'false'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Type', 'application/json'
DECLARE @len int
SET @len = len(@body)
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Subscription-Key','4f82f9d067914287979884f920d86ffb'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Trace:true'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Length', @len
EXEC sp_OAMethod @Object, 'SETRequestBody', null, 'Body', @body
EXEC sp_OAMethod @Object, 'sEND', null, @body
EXEC sp_OAMethod @Object, 'responSEText', @ResponSEText OUTPUT
我想调整上面的代码,以便使用不同的内容类型将参数的值(如虚拟csv
文件而不是XML
或JSON
协议)以适当的格式发送到另一个端点,我无法弄清楚如何做这个:
DECLARE @Object AS int;
DECLARE @ResponSEText AS Varchar(8000);
DECLARE @Token AS Varchar(8000);
DECLARE @xmltest AS Varchar(8000);
DECLARE @hResult AS int
DECLARE @source varchar(255), @desc varchar(255)
DECLARE @LocationId varchar(25);
DECLARE @Body AS varchar(8000) = -- here should go the parameters which are username, clientid, password and file (where file has to be the virtual CSV file with the columns and rows separated by "|"
EXEC sp_OACREATE 'MSXML2.ServerXMLHttp', @Object OUT;
EXEC sp_OAMethod @Object, 'open', NULL, 'POST',
'https://www.selfawb.ro/import_awb_integrat.php', 'false'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Type', 'text/xml'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Trace:true'
EXEC sp_OAMethod @Object, 'SETRequestBody', null, 'Body', @body
EXEC sp_OAMethod @Object, 'sEND', null, @body
EXEC sp_OAMethod @Object, 'responSEText', @ResponSEText OUTPUT
我问了API
的老板,他们向我提供了一个例子,如下面的打印屏幕所示:
有人能给我一个提示还是一只手?谢谢
答案
如果要发送虚拟文件,例如您在内存中生成的文件然后作为POST的一部分作为附件发送,那么您只需要将csv文本作为帖子的一部分包含为带文件名的附件。尝试使用PostMan使用实际的csv文件进行设置,并分析POST以查看如何格式化要通过线路序列化的csv文本作为csv文件附件。
否则,如果您使用的是SQL 2016或更高版本,则可以使用STRING_SPLIT解析csv文本。希望这可以帮助。
DECLARE @CsvParams NVARCHAR(256) =
'UserName,test.integration12,'
+ 'Password,Urgent123'
SELECT value FROM STRING_SPLIT(@CsvParams, ',');
上面的代码生成一个包含分隔值的表:
有关STRING_SPLIT的更多信息,请访问:STRING_SPLIT (Transact-SQL)
以上是关于SQL Server - 使用虚拟CSV调用REST API的主要内容,如果未能解决你的问题,请参考以下文章
将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)
Sqlcmd使用SQL Server存储过程将数据导出到csv
从 Excel / CSV 批量插入到 SQL Server