В SQL Server 2008 R2 я пытаюсь прочитать значение XML в виде таблицы.
Пока я здесь:
DECLARE @XMLValue AS XML;
SET @XMLValue = '<SearchQuery>
<ResortID>1453</ResortID>
<CheckInDate>2011-10-27</CheckInDate>
<CheckOutDate>2011-11-04</CheckOutDate>
<Room>
<NumberOfADT>2</NumberOfADT>
<CHD>
<Age>10</Age>
</CHD>
<CHD>
<Age>12</Age>
</CHD>
</Room>
<Room>
<NumberOfADT>1</NumberOfADT>
</Room>
<Room>
<NumberOfADT>1</NumberOfADT>
<CHD>
<Age>7</Age>
</CHD>
</Room>
</SearchQuery>';
SELECT
Room.value('(NumberOfADT)[1]', 'INT') AS NumberOfADT
FROM @XMLValue.nodes('/SearchQuery/Room') AS SearchQuery(Room);
Как видите, Room
узел иногда получает CHD
дочерних узлов, но иногда нет.
Предположим, что я получаю это значение XML в качестве параметра хранимой процедуры. Итак, мне нужно работать со значениями для запроса таблиц моей базы данных. Как лучше всего полностью прочитать этот параметр XML?
EDIT
Я думаю, мне нужно выразить то, что я ожидаю взамен здесь. Ниже приведен код скрипта для таблицы, что мне нужно здесь:
DECLARE @table AS TABLE(
ResorrtID INT,
CheckInDate DATE,
CheckOutDate DATE,
NumberOfADT INT,
CHDCount INT,
CHDAges NVARCHAR(100)
);
Для значения XML, которое я предоставил выше, подходит следующая вставка t-sql:
INSERT INTO @table VALUES(1453, '2011-10-27', '2011-11-04', 2, 2, '10;12');
INSERT INTO @table VALUES(1453, '2011-10-27', '2011-11-04', 1, 0, NULL);
INSERT INTO @table VALUES(1453, '2011-10-27', '2011-11-04', 1, 1, '7');
CHDCount
- для количества узлов CHD
в узле Room
. Кроме того, сколько у меня Room
узлов, столько строк таблицы у меня здесь.
Что касается того, как это должно выглядеть, см. Рисунок ниже:
На самом деле этот код предназначен для запроса бронирования отелей. Итак, мне нужно
работать с этими значениями я получил из параметра XML для запроса моих таблиц
и вернуть свободные номера. Я говорю это, потому что, возможно, это помогает
Вы, ребята, чтобы увидеть это до конца. Я не ищу полный код для
система бронирования номеров. Это было бы так эгоистично.