2010-07-06 2 views
1

Итак, я пытаюсь преобразовать веб-службу, которая была приложением Oracle в T-SQL. Самое интересное, что у меня есть только код веб-службы и код базы данных. Я вижу, что есть входной параметр, который содержит <ROWSET><ROW NUM=\"1\"><TRANSACTIONID>123456</TRANSACTIONID></ROW></ROWSET>Нужно ли использовать T-SQL Rowset?

Я просматриваю документы для T-SQL, и я не могу найти ничего полезного в том, что я могу сделать с этим xml. Из того, что я могу понять, он используется для вставки значений в таблицу, поскольку элементы не будут одинаковыми в каждом вызове.

Любая помощь будет оценена по достоинству.

ответ

2

Предполагая, что этот XML является параметром для сохраненной процедуры или функции T-SQL, вы можете использовать утилиту для работы с данными этого типа. Here «s полный пример (здесь повторно отправил ясности):

DECLARE @idoc int 
DECLARE @doc varchar(1000) 
SET @doc =' 
<people> 
    <person id="1"> 
    <firstname>John</firstname> 
    <surname>Doe</surname> 
    </person> 
    <person id="2"> 
    <firstname>Mary</firstname> 
    <surname>Jane</surname> 
    </person> 
</people> 
' 
/* Create an internal representation of the XML document */ 
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc 
-- Execute a SELECT statement that uses the OPENXML rowset provider. 
SELECT * 
FROM  OPENXML (@idoc, '/people/person',1) 
      WITH (id varchar(20), 
        firstname varchar(20) 'firstname', 
        surname varchar(20) 'surname') 
EXECUTE sp_xml_removedocument @idoc 

Результат:

id firstname  surname 
1 John   Doe 
2 Mary   Jane 
+0

Хм. Будет ли это работать, если подэлементы будут динамическими. Например, первое имя может быть там, или может не быть, или, возможно, могут быть и дополнительные элементы ...? – MisterIsaak

+0

@Jisaak - Да, все будет хорошо. Вы получите NULL для элементов, которые не присутствуют (например, вытащите Mary в мой пример выше и запустите его, чтобы увидеть это). Если присутствуют дополнительные элементы, они ничего не повредят. – dcp

+0

Хорошо. Я пытался обновить таблицу, используя ее, и возникли некоторые проблемы. Я буду держать его простым и идти оттуда. Благодаря! – MisterIsaak