Как использовать функцию OPEN XML в функции SQL Server? - PullRequest
0 голосов
/ 16 июня 2020

Мне нужно использовать функцию OPENXML в функции SQL Server, но хранимые процедуры не разрешены в функции. В результате я не могу использовать sp_xml_preparedocument для получения дескриптора документа, что лишает меня возможности использовать функцию OPENXML.

Итак, мой вопрос: есть ли способ использовать OPENXML в функция кроме превращение моей функции в хранимую процедуру?

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Вам не нужно OPENXML. вы можете использовать метод узлов для типа данных XML и анализировать XML. Ссылка MSDN

Сценарий ios для использования метода nodes () такой же, как и для использования OPEN XML (Transact- SQL), который предоставляет набор строк вид XML. Однако вам не нужно использовать курсоры при использовании метода nodes () для таблицы, содержащей несколько строк XML документов.

DECLARE @location xml = '<root>  
  <Location LocationID="10">  
     <step>1</step>  
  </Location>  
  <Location LocationID="20">  
     <step>2</step>  
  </Location> 
  </root>'


CREATE FUNCTION ReturnStep (@location xml)
RETURNS TABLE
AS
RETURN
SELECT t.value('.','int') as stepnumber
FROM @location.nodes('/root/Location/step') as loc(t)

SELECT * FROM dbo.ReturnStep(@location)
+------------+
| stepnumber |
+------------+
|          1 |
|          2 |
+------------+
0 голосов
/ 16 июня 2020

Согласно документации Microsoft (https://docs.microsoft.com/en-us/sql/t-sql/functions/openxml-transact-sql?view=sql-server-ver15) вы должны передать docId в OPENXML, который является выходным параметром sp_xml_preparedocument. Следовательно, существует корреляция с OPENXML и sp_xml_preparedocument.

Попробуйте это http://codegumbo.com/index.php/2013/09/30/sql-server-xquery-nodes-method/ https://blog.sqlauthority.com/2016/05/19/sql-server-handling-xml-documents-notes-field-125/

...