SQL-запрос SQL в поле Nvarchar (max)? - PullRequest
3 голосов
/ 11 апреля 2011

XML хранится в поле nvarchar (max). Я понимаю, что существует тип данных XML, но в этом случае он не сохраняется таким образом. Допустим, XML структурирован следующим образом:

<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, я просто не совсем уверен, как.

1 Ответ

8 голосов
/ 11 апреля 2011

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

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)')
...