Извлечение данных для XML и вывод в файл для сохранения в папке - PullRequest
0 голосов
/ 17 июня 2019

На самом деле в этом запросе есть два вопроса.Первый связан с созданием XML-файла из SQL-запроса с несколькими дочерними записями в 3 категориях.

Сгенерированный XML, кажется, объединяет все дочерние элементы в одно значение.Мне нужно, чтобы они были разделены одним и тем же тегом.

Второй вопрос - попытка вывести полученный файл в файл XML в определенной папке на сервере SQL

Я пробовал несколько настроекдля данных, но ни одна из них не работает, например, включая [1] и [2], (1) и (2), исключая родительский элемент для второго значения и т. д. Я сделал это в MS Access, используя XSLT-преобразование

Что касается вывода, я пробовал BCP, queryout, OutputFile Output To и несколько других.Запрос указывает, что он был успешным, но файл не создан.

Таблица SQL (FD__Services_from_XML) выглядит следующим образом: Все поля Varchar (50)

  Service_SRI     CovServ_Mod1     CovServ_Mod2
       1               B1               B2
       2               C1               C2
       3               D1               D2

Запрос, генерирующий XMLвыглядит следующим образом:

  DECLARE @fileName VARCHAR(50)
DECLARE @sqlStr VARCHAR(2000)
DECLARE @sqlCmd VARCHAR(1000)
--
SET @fileName = 'C:\Users\Steve\Downloads\XML_Export_Test_1.xml'
--
SET @sqlStr = 
'  
Select
  Service_SRI As [SourceRecordIdentifier], 
  CovServ_Mod1 As [ServiceModifiers/ServiceModifier],
  CovServ_Mod2 As [ServiceModifiers/ServiceModifier]
FROM FD__Services_from_XML
FOR XML PATH('ServiceEvent'), ROOT('ServiceEvents')
'
--
SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName + ' -w -T'
--
EXEC xp_cmdshell @sqlCmd

Как я уже упоминал ранее, я ожидал, что файл будет создан в C: \ Users \ Steve \ Downloads \ XML_Export_Test_1.xml. Файл не был создан.Я получаю сообщение «Запрос выполнен успешно».

Вывод XML, который я получаю, выглядит следующим образом: Обратите внимание, что два отдельных поля Covserv_Mod1 и Mod2 объединены

<ServiceEvents>
  <ServiceEvent>
    <SourceRecordIdentifier>1</SourceRecordIdentifier>
    <ServiceModifiers>
      <ServiceModifier>B1B2</ServiceModifier>
    </ServiceModifiers>
  </ServiceEvent>
etc ...
</ServiceEvents>

Вывод, который я искалis:

<ServiceEvents>
  <ServiceEvent>
    <SourceRecordIdentifier>1</SourceRecordIdentifier>
    <ServiceModifiers>
      <ServiceModifier>B1</ServiceModifier>
      <ServiceModifier>B3</ServiceModifier>
    </ServiceModifiers>
   </ServiceEvent>
etc ...
</ServiceEvents>

Таблица SQL:

CREATE TABLE [dbo].[FD__Services_from_XML](
[Service_SRI] [nvarchar](50) NOT NULL PRIMARY KEY,
[CovServ_Mod1] [nvarchar](50) NULL,
[CovServ_Mod2] [nvarchar](50) NULL
) ON [PRIMARY]

Я импортировал данные XML из файла XML, который выглядит следующим образом:

  <ServiceEvents>
    <ServiceEvent>
      <SourceRecordIdentifier>1</SourceRecordIdentifier> 
      <ServiceEventCoveredServiceModifiers>
        <ServiceEventCoveredServiceModifier>
          <ModifierCode>B1</ModifierCode> 
        </ServiceEventCoveredServiceModifier>
        <ServiceEventCoveredServiceModifier>
          <ModifierCode>B2</ModifierCode> 
        </ServiceEventCoveredServiceModifier>
      </ServiceEventCoveredServiceModifier>
    </ServiceEvent>
    etc. … (1, C1, C2) (3, D1, D2)
  </ServiceEvents>
...