Member 11403304 Ответов: 0

Как исправить SQL, чтобы результат XML правильно отображался в excel?


В функции, которую я использовал KEDIT для windows, чтобы написать запрос в vb.net который возвращает xml-документ, а затем этот xml отображается в виде электронной таблицы Excel. Проблема, с которой я столкнулся, заключается в том, что данные двух столбцов разделяются, а затем вводятся в следующий столбец. Как мне это исправить?

Вот моя функция
Private Shared Function GetSql(ByVal adtmStartDateTime As Date, ByVal adtmEndDateTime As Date) As String
        Dim strSQL As String

        strSQL = "--DROP TABLE #TEMP_Request" + vbCrLf +
    "" + vbCrLf +
    ";WITH XMLNAMESPACES ('http://www.w3.org/2003/05/soap-envelope' AS soap," + vbCrLf +
    "'http://niem.gov/niem/niem-core/2.0' AS nc," + vbCrLf +
    "'urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:CommonTypes-4.0' AS ecf," + vbCrLf +
    "Default 'urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:DocumentQueryMessage-4.0')" + vbCrLf +
    "SELECT MessageID, ProcessDateTime AS 'RequestDateTime'," + vbCrLf +
    "Convert(Xml, InputMessage.Body).value('(//*[local-name()=""DocumentQueryMessage""]/nc:CaseTrackingID)[1]','varchar(250)') AS 'CaseNumber'" + vbCrLf +
    "INTO #TEMP_Request" + vbCrLf +
    "FROM InputMessage" + vbCrLf +
    "WHERE" + vbCrLf +
    "(QueueName = 'ECF_COURTRECORD_QUERY_02')" + vbCrLf +
    "And (ProcessDateTime >= CONVERT(DATETIME, '" + adtmStartDateTime.ToString + "', 102))" + vbCrLf +
     "AND (ProcessDateTime < CONVERT(DATETIME, '" + adtmEndDateTime.ToString + "', 102))" + vbCrLf +
     "And" + vbCrLf +
     "CONVERT(XML, InputMessage.Body).exist('(//*[local-name()=""DocumentQueryMessage""])') = 1" + vbCrLf +
    ";WITH XMLNAMESPACES ('http://www.w3.org/2003/05/soap-envelope' AS soap," + vbCrLf +
    "'http://niem.gov/niem/niem-core/2.0' AS nc," + vbCrLf +
    "'urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:CommonTypes-4.0' AS ecf," + vbCrLf +
    "'http://niem.gov/niem/domains/jxdm/4.0' AS d," + vbCrLf +
    "Default 'urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:DocumentResponseMessage-4.0')" + vbCrLf +
    "SELECT " + vbCrLf +
    "(SELECT OM.MessageID, TR.RequestDateTime, TR.CaseNumber," + vbCrLf +
    "Convert(Xml, OM.Body).value('(//DocumentResponseMessage/ecf:Document/nc:DocumentDescriptionText)[1]','varchar(250)') AS 'DocumentName'," + vbCrLf +
    "Convert(Xml, OM.Body).value('(//DocumentResponseMessage/ecf:Document/ecf:DocumentMetadata/d:RegisterActionDescriptionText)[1]','varchar(250)') AS 'CaseEventDescription'," + vbCrLf +
    "Convert(Xml, OM.Body).value('(soap:Envelope/soap:Body/DocumentResponseMessage/ecf:Document/nc:DocumentFiledDate/nc:DateTime)[1]','datetime') AS 'DocumentFiledDate'" + vbCrLf +
    "FROM #TEMP_Request AS TR" + vbCrLf +
    "INNER JOIN  OutputMessage AS OM ON (TR.MessageID = OM.MessageID)" + vbCrLf +
    "WHERE" + vbCrLf +
       "Convert(Xml, OM.Body).value('(soap:Envelope/soap:Body/DocumentResponseMessage/ecf:Document/nc:DocumentIdentification/nc:IdentificationID)[1]','varchar(250)') IS NOT NULL " + vbCrLf +
        "For Xml  PATH('DocumentGetAuditReport'),  Type)  " + vbCrLf +
           "For Xml PATH('Results') "

        Return strSQL
    End Function



Вот результат в xml, та часть, которая имеет проблему в Excel.
<DocumentGetAuditReport xmlns="urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:DocumentResponseMessage-4.0" xmlns:d="http://niem.gov/niem/domains/jxdm/4.0" xmlns:ecf="urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:CommonTypes-4.0" xmlns:nc="http://niem.gov/niem/niem-core/2.0" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <MessageID>422A</MessageID>
    <RequestDateTime>2018-07-20T15:06:39.087</RequestDateTime>
    <OrganizationORI>TP0070</OrganizationORI>
    <OrganizationName>St Martin County Attorney</OrganizationName>
    <CaseNumber>00-CV-00-001</CaseNumber>
    <DocumentName>Findings, Conclusions & Orderfor Disbursal of Funds to petitioner (Comdemnation for Roadway Purposes</DocumentName>
    <CaseEventDescription>Findings of Fact, Conclusions of Law and Order</CaseEventDescription>
    <DocumentFiledDate>2017-02-28T15:46:39</DocumentFiledDate>
  </DocumentGetAuditReport>


Вот результат Excel
"DocumentGet интеграции запросов сервисные документы запрашиваются и предоставляются июля 2018 года"
Запрос Дата И Время Номер Дела Название Документа Описание События Дела Дата Подачи Документа
2018-07-20T14:32:31.247 00-CV-00-001 выводы выводы и порядок выплаты средств заявителю (Comdemnation для целей дорожного движения выводы факта выводы закона и порядка 28.02.2017


Правильный вывод должен иметь имя документа столбец со следующими данными
Выводы, заключения и усилитель; заказ, выдача денежных средств заявителя (Comdemnation для использования проезжей части

В настоящее время этот столбец на выводы

Описание События колонка должна была иметь
Выводы по фактам, выводы по закону и порядку

В настоящее время в этой колонке есть выводы и порядок выдачи средств заявителю (Comdemnation для целей дорожного движения, что является неправильным

В графе дата подачи документа содержатся фактические данные. Это неправильно. Вместо этого он должен иметь дату 2/28/2017

Как мне исправить свой KEDIT или что мне нужно сделать, чтобы данные в каждом столбце не были обрезаны?

Заранее спасибо.

Что я уже пробовал:

Private Shared Function GetSql(ByVal adtmStartDateTime As Date, ByVal adtmEndDateTime As Date) As String
        Dim strSQL As String

        strSQL = "--DROP TABLE #TEMP_Request" + vbCrLf +
    "" + vbCrLf +
    ";WITH XMLNAMESPACES ('http://www.w3.org/2003/05/soap-envelope' AS soap," + vbCrLf +
    "'http://niem.gov/niem/niem-core/2.0' AS nc," + vbCrLf +
    "'urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:CommonTypes-4.0' AS ecf," + vbCrLf +
    "Default 'urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:DocumentQueryMessage-4.0')" + vbCrLf +
    "SELECT MessageID, ProcessDateTime AS 'RequestDateTime'," + vbCrLf +
    "Convert(Xml, InputMessage.Body).value('(//*[local-name()=""DocumentQueryMessage""]/nc:CaseTrackingID)[1]','varchar(250)') AS 'CaseNumber'" + vbCrLf +
    "INTO #TEMP_Request" + vbCrLf +
    "FROM InputMessage" + vbCrLf +
    "WHERE" + vbCrLf +
    "(QueueName = 'ECF_COURTRECORD_QUERY_02')" + vbCrLf +
    "And (ProcessDateTime >= CONVERT(DATETIME, '" + adtmStartDateTime.ToString + "', 102))" + vbCrLf +
     "AND (ProcessDateTime < CONVERT(DATETIME, '" + adtmEndDateTime.ToString + "', 102))" + vbCrLf +
     "And" + vbCrLf +
     "CONVERT(XML, InputMessage.Body).exist('(//*[local-name()=""DocumentQueryMessage""])') = 1" + vbCrLf +
    ";WITH XMLNAMESPACES ('http://www.w3.org/2003/05/soap-envelope' AS soap," + vbCrLf +
    "'http://niem.gov/niem/niem-core/2.0' AS nc," + vbCrLf +
    "'urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:CommonTypes-4.0' AS ecf," + vbCrLf +
    "'http://niem.gov/niem/domains/jxdm/4.0' AS d," + vbCrLf +
    "Default 'urn:oasis:names:tc:legalxml-courtfiling:schema:xsd:DocumentResponseMessage-4.0')" + vbCrLf +
    "SELECT " + vbCrLf +
    "(SELECT OM.MessageID, TR.RequestDateTime, TR.CaseNumber," + vbCrLf +
    "Convert(Xml, OM.Body).value('(//DocumentResponseMessage/ecf:Document/nc:DocumentDescriptionText)[1]','varchar(250)') AS 'DocumentName'," + vbCrLf +
    "Convert(Xml, OM.Body).value('(//DocumentResponseMessage/ecf:Document/ecf:DocumentMetadata/d:RegisterActionDescriptionText)[1]','varchar(250)') AS 'CaseEventDescription'," + vbCrLf +
    "Convert(Xml, OM.Body).value('(soap:Envelope/soap:Body/DocumentResponseMessage/ecf:Document/nc:DocumentFiledDate/nc:DateTime)[1]','datetime') AS 'DocumentFiledDate'" + vbCrLf +
    "FROM #TEMP_Request AS TR" + vbCrLf +
    "INNER JOIN  OutputMessage AS OM ON (TR.MessageID = OM.MessageID)" + vbCrLf +
    "WHERE" + vbCrLf +
       "Convert(Xml, OM.Body).value('(soap:Envelope/soap:Body/DocumentResponseMessage/ecf:Document/nc:DocumentIdentification/nc:IdentificationID)[1]','varchar(250)') IS NOT NULL " + vbCrLf +
        "For Xml  PATH('DocumentGetAuditReport'),  Type)  " + vbCrLf +
           "For Xml PATH('Results') "

        Return strSQL
    End Function

MadMyche

Просто потому, что SQL может делать XML, не означает, что вы должны делать это таким образом. Мое общее правило мышления состоит в том, чтобы просто получить данные из SQL, а затем использовать приложение для создания желаемой презентации.
И все, что делает ваш код, - это создает строку, содержащую команду SQL. На самом деле ничего не нужно делать с этой командой

Alek Massey

Программа Excel интерпретирует запятые в данных в качестве разделителя между отдельными значениями.

0 Ответов