У меня нет опыта работы с , как загрузить XML из URL через Azure SQL Server .В normal SQL-Server есть несколько странных подходов, но я бы рекомендовал прочитать URL-адрес из другого приложения.
Но - поскольку вам удалось каким-то образом загрузить файл - это не похоже наваша проблема в любом случае.
Почему вы чувствуете необходимость преобразовать это в JSON
?SQL-Server может неплохо работать с нативным XML.Стандартный формат передачи - NVARCHAR(MAX)
, то есть строка UCS-2
, которая почти совпадает с UTF-16
или простой 2-byte-unicode
.Любая строка .Net
может быть отправлена на SQL-сервер как .Предельный размер NVARCHAR(MAX)
достаточно велик для ваших нужд ...
Просто создайте функцию, подобную следующей, и вызовите ее через приложение для чтения.Вы можете передать параметр в виде строки:
Эта функция будет принимать 2-байтовую_кодированную строку в юникоде и неявно преобразовывать ее в XML:
CREATE FUNCTION dbo.ReadTheXml(@xml XML)
RETURNS TABLE
AS
RETURN
SELECT @xml.value('(/Response/Status/text())[1]','nvarchar(max)') AS Response_Status
,job.value('(ID/text())[1]','nvarchar(max)') AS Job_ID
,job.value('(Name/text())[1]','nvarchar(max)') AS Job_Name
,job.value('(Description/text())[1]','nvarchar(max)') AS Job_Description
,job.value('(StartDate/text())[1]','datetime') AS Job_StartDate
,job.value('(DueDate/text())[1]','datetime') AS Job_DueDate
,job.value('(Manager/ID/text())[1]','int') AS Job_Manager_ID
,job.value('(Manager/Name/text())[1]','nvarchar(max)') AS Job_Manager_Name
FROM @xml.nodes('/Response/Jobs/Job') A(job)
GO
- Предполагаявы уже загрузили XML в строку, вы можете проверить это следующим образом:
DECLARE @xml NVARCHAR(MAX) = --the xml as NVARCHAR(MAX) string
N'<Response api-method="Current">
<Status>OK</Status>
<Jobs>
<Job>
<ID>N1234</ID>
<Name>Job name here</Name>
<Description>Job description here</Description>
<StartDate>2018-10-08T00:00:00</StartDate>
<DueDate>2018-10-21T00:00:00</DueDate>
<Manager>
<ID>12345</ID>
<Name>John Smith</Name>
</Manager>
</Job>
<Job>
<ID>blah</ID>
<Name>One more</Name>
<Description>This is one more description</Description>
<StartDate>2018-10-08T00:00:00</StartDate>
<DueDate>2018-10-21T00:00:00</DueDate>
<Manager>
<ID>12345</ID>
<Name>John Smith</Name>
</Manager>
</Job>
</Jobs>
</Response>';
- Используйте функцию точно так же, как вы используете таблицу:
SELECT * INTO #tmpStagingTable
FROM dbo.ReadTheXml(@xml); --pass in the XML as string
--call the result from the staging table
SELECT * FROM #tmpStagingTable; --create a staging table *on the fly*
GO
--clean up for testing
DROP FUNCTION dbo.ReadTheXml;
DROP TABLE #tmpStagingTable;
Результат должен быть вставлен в промежуточный стол.Выполните все необходимые операции очистки и бизнес-логики для этой промежуточной таблицы и продолжайте оттуда.
Результат
+-----------------+--------+---------------+------------------------------+-------------------------+-------------------------+----------------+------------------+
| Response_Status | Job_ID | Job_Name | Job_Description | Job_StartDate | Job_DueDate | Job_Manager_ID | Job_Manager_Name |
+-----------------+--------+---------------+------------------------------+-------------------------+-------------------------+----------------+------------------+
| OK | N1234 | Job name here | Job description here | 2018-10-08 00:00:00.000 | 2018-10-21 00:00:00.000 | 12345 | John Smith |
+-----------------+--------+---------------+------------------------------+-------------------------+-------------------------+----------------+------------------+
| OK | blah | One more | This is one more description | 2018-10-08 00:00:00.000 | 2018-10-21 00:00:00.000 | 12345 | John Smith |
+-----------------+--------+---------------+------------------------------+-------------------------+-------------------------+----------------+------------------+