Как вы читаете столбец XML в SQL Server 2008?
Я никогда не использовал 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>
Ответы
Ответ 1
Попробуйте что-то вроде этого:
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
Ответ 2
Вам нужно использовать 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 в таблице (многострочный). По соображениям производительности не используйте "//Клиент", а используйте абсолютный путь вместо "/ArrayOfCustomers/Customer". "//Клиент" пройдет весь XML, чтобы найти узлы Customer
в любом месте XML на любом уровне.