Как исправить 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 интерпретирует запятые в данных в качестве разделителя между отдельными значениями.