Как вы читаете столбец XML в SQL Server 2008? - PullRequest
15 голосов
/ 27 января 2011

Я никогда не использовал XML в SQL Server 2008, мне нужно извлечь список клиентов в таблицу переменных, как вы это делаете?

Учитывая, что у меня есть столбец с именем CustomerList в таблице Sales, который выглядит примерно так, как показано ниже, как извлечь список клиентов в sql?

<ArrayOfCustomers xmlns:xsd="http://www.w3.org/2001/XMLSchema"        
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Customer>
       <ItemId>1</ItemId>
       <Value>Mr Smith</Value>
   </Customer>
   <Customer>
      <ItemId>2</ItemId>
      <Value>Mr Bloggs</Value>
   </Customer>
</ArrayOfCustomers>

Ответы [ 2 ]

22 голосов
/ 27 января 2011

Попробуйте что-то вроде этого:

SELECT
   Cust.value('(ItemId)[1]', 'int') AS 'ItemID',
   Cust.value('(Value)[1]', 'Varchar(50)') AS 'Customer Name'
FROM
   dbo.Sales.CustomerList.nodes('/ArrayOfCustomers/Customer') AS AOC(Cust)

Это должно дать вам что-то вроде этого:

ItemID  Customer Name
   1         Mr Smith
   2         Mr Bloggs
20 голосов
/ 27 января 2011

Вам необходимо использовать CROSS APPLY из таблицы в столбец XML

create table sales (customerlist xml)
insert sales select '
    <ArrayOfCustomers xmlns:xsd="http://www.w3.org/2001/XMLSchema"        
                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       <Customer>
           <ItemId>1</ItemId>
           <Value>Mr Smith</Value>
       </Customer>
       <Customer>
          <ItemId>2</ItemId>
          <Value>Mr Bloggs</Value>
       </Customer>
    </ArrayOfCustomers>'

Ваш запрос:

SELECT
   N.C.value('ItemId[1]', 'int') ItemId,
   N.C.value('Value[1]', 'varchar(100)') Value
FROM dbo.Sales
CROSS APPLY CustomerList.nodes('//Customer') N(C)

РЕДАКТИРОВАТЬ - примечание
Запрос вышебыл написан быстро, чтобы проиллюстрировать работу со столбцами XML в таблице (многострочный).Из соображений производительности не используйте «// Customer», а вместо этого используйте абсолютный путь «/ ArrayOfCustomers / Customer».«// Клиент» пройдет через весь XML, чтобы найти Customer узлов в любом месте XML на любом уровне.

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