2011-04-11 4 views
3

У меня есть XML, хранящийся в поле nvarchar (max). Я понимаю, что существует тип данных XML, но в этом случае он не сохраняется таким образом. Скажем XML структурирована так:SQL Server Query XML в поле Nvarchar (max)?

<root> 
<hdr> 
    <name>aj</name> 
</hdr> 
<dtls> 
    <dtl> 
    <price>1</price> 
    </dtl> 
    <dtl> 
    <price>7</price> 
    </dtl> 
    <dtl> 
    <price>3</price> 
    </dtl> 
</dtls> 
</root> 

То, что я пытаюсь сделать, это получить количество деталей (DTL) узлов, которые существуют для записи. Я уверен, что это возможно с помощью xpath/xquery, я просто не совсем уверен, как это сделать.

ответ

7

Попробуйте это:

SELECT CAST(<YOUR_XML_COLUMN> AS XML).query('count(//dtl)') 
    FROM <YOUR_TABLE> 

например:

DECLARE @x NVARCHAR(MAX) 
SET @x = '<root> <hdr> <name>aj</name> </hdr> <dtls> <dtl>  <price>1</price> </dtl> <dtl>  <price>7</price> </dtl> <dtl>  <price>3</price> </dtl> </dtls> </root>' 
SELECT CAST(@x AS XML).query('count(//dtl)') 
+3

@ + 1 - бы он должен бросить его 'nvarchar' как' xml' для этой работы? – JNK

+0

@JNK: Да, я обновил сообщение, чтобы отразить то же самое. – Chandu

Смежные вопросы