Проблема с заполнением данных из XML - PullRequest
0 голосов
/ 28 мая 2019

Я читаю данные из XML в таблицу. Когда я выбираю из таблицы, таблица пуста.

SET @INPUTXML = CAST(@Attribute AS XML)
EXEC Sp_xml_preparedocument @TestDoc OUTPUT, @INPUTXML

SELECT Row_Number() OVER (ORDER BY Name) AS Row, *
INTO #tData
FROM OPENXML(@TestDoc, N'/DocumentElement/dtData') 
WITH (
        ID VARCHAR(100) './ID'
        , Name VARCHAR(100) './Name'
        , Value VARCHAR(max) './Value'
        , Column VARCHAR(100) './Column'
)

EXEC Sp_xml_removedocument @TestDoc

Ниже приведены мои вопросы:

  1. select * from #tData - пустая таблица. Почему данные не заполняются?
  2. Что делает Sp_xml_preparedocument? Когда я печатаю @TestDoc, он дает мне номер
  3. Что такое Sp_xml_removedocument?

1 Ответ

0 голосов
/ 28 мая 2019

Однако, чтобы ответить на ваши вопросы.

  1. #tData пусто, потому что ваш оператор SELECT не вернул данные.Оператор SELECT...INTO по-прежнему создает таблицу, даже если SELECT не возвращает строк.Мы не можем сказать, почему ваш SELECT не возвращает никаких данных, потому что у нас нет образцов данных.Если вы удалите предложение INTO, вы увидите, что строки не возвращаются, поэтому вам нужно исправить свои SELECT, FROM и т. Д., Но это влечет мое утверждение за минуту (об использовании XQUERY)
  2. sp_xml_preparedocument (Transact-SQL) объясняет лучше, чем я мог.На самом деле, вы не должны больше его использовать, так как он использовался для чтения XML в SQL Server 2000 (возможно, 2005) и ранее.Конечно, SQL Server 2008 поддерживал XQUERY, который вы, по крайней мере, должны использовать, если используете SSMS 2014. Чтобы процитировать вступительное заявление документации, хотя:

    Считывает текст XML, представленный в качестве ввода, анализирует текст с помощьюсинтаксический анализатор MSXML (Msxmlsql.dll) и предоставляет проанализированный документ в состоянии, готовом к использованию.Этот проанализированный документ представляет собой древовидное представление различных узлов в документе XML: элементов, атрибутов, текста, комментариев и т. Д.

  3. sp_xml_removedocument (Transact-SQL) , но опять же, вы должны использовать XQUERY.

    Удаляет внутреннее представление документа XML, заданное дескриптором документа, и делает недействительным дескриптор документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...