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文件而不是XMLJSON协议)以适当的格式发送到另一个端点,我无法弄清楚如何做这个:

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的老板,他们向我提供了一个例子,如下面的打印屏幕所示:

Example

有人能给我一个提示还是一只手?谢谢

答案

如果要发送虚拟文件,例如您在内存中生成的文件然后作为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, ',');

上面的代码生成一个包含分隔值的表:

enter image description here

有关STRING_SPLIT的更多信息,请访问:STRING_SPLIT (Transact-SQL)

以上是关于SQL Server - 使用虚拟CSV调用REST API的主要内容,如果未能解决你的问题,请参考以下文章

将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)

将 CSV 文件导入 SQL Server

Sqlcmd使用SQL Server存储过程将数据导出到csv

从 Excel / CSV 批量插入到 SQL Server

使用 map reduce 将数据从大型 csv 文件加载到 sql server

powershell 使用FAF技术(批量数据集和内联多线程)快速CSV到SQL Server导入