sql xml обработчик заказов - PullRequest
1 голос
/ 19 июля 2011

Мне было интересно, может кто-нибудь указать мне на учебник или дать мне предложения по обработке XML-документа "Запрос на предложение". Использование SQL Server 2005. Например:

<MyQuote>  
<Header>  
  <Customer>XYZ</Customer>  
  <Material>Wood&</Material>  
<Header>  
<LineItems>  
<Line>  
   <Quantity>32</Quantity>  
   <Model>Chair 350</Model>  
   <Color>Red</Color>    
 </Line>  
  .   
</LineItems>  
</MyQuote>

Просто намочил ноги с помощью XQuery. Мне нужно разделить этот документ на отдельные позиции, идентифицировать каждую из них по номеру, проверить их, рассчитать цену. Также необходимо иметь возможность добавлять / редактировать / удалять любого. Я могу видеть, как получить строки в таблицу, но не узнать, как идентифицировать их с помощью последовательного номера и применить к ним хранимую процедуру. Мне нужно, чтобы в случайном порядке можно было обработать любой запрос, например validate line 6, calc price for line 3 delete line 4, change line 2 to Yellow и т. Д.

Я предполагаю, что лучший способ - это сохранить весь документ в виде столбца XML и выполнять операции с ним, а не уничтожать и хранить отдельные позиции в реляционной таблице?

Буду очень признателен за любые советы, коды, ссылки и т. Д.

1 Ответ

1 голос
/ 21 июля 2011

Мне было интересно, может кто-нибудь указать мне на учебник или дать мне предложения по обработке XML-документа "Запрос на предложение".Использование SQL Server 2005

Вот несколько полезных страниц:

Мне нужно разделить этот документ на отдельные позиции

Это даст вам все строки:

select 
  T.N.value('Quantity[1]', 'int') as Quantity,
  T.N.value('Model[1]', 'varchar(25)')    as Model,
  T.N.value('Color[1]', 'varchar(25)')    as Color
from @XML.nodes('/MyQuote/LineItems/Line') as T(N)

каждая сномер

Не так просто.Посмотрите на этот ответ. XQuery и Node Ids

Также необходимо иметь возможность добавлять / редактировать / удалять любые

Просто используйте modify () Method(Тип данных xml)

I need to randomly be able to process any request such as validate line 6, calc price for line 3 delete line 4, change line 2 to Yellow

Чтобы получить строку 6, вам нужно следующее:

select 
  T.N.value('Quantity[1]', 'int') as Quantity,
  T.N.value('Model[1]', 'varchar(25)')    as Model,
  T.N.value('Color[1]', 'varchar(25)')    as Color
from @XML.nodes('/MyQuote/LineItems/Line[6]') as T(N)

/MyQuote/LineItems/Line[6] совпадает с /MyQuote/LineItems/Line[position()=6]

Я предполагаю, что лучший способ - сохранить весь документ в виде столбца XML и осуществлять операции с ним, а не уничтожать и сохранять отдельные позиции в реляционной таблице?

Неужели?Я не знаю, что для вас лучше, но я бы определенно уничтожил данные в таблицах, если бы не было действительно веских причин.

...