Ho alcuni problemi con i exist()
e value()
metodi in SQL Server 2008.SQL Server XML esistere()
mio XML è simile al seguente:
<?xml version="1.0" encoding="UTF-8"?>
<library>
<branches>
<branch>
<codelib>1</codelib>
<name>Campus</name>
</branch>
<branch>
<codelib>2</codelib>
<name>47th</name>
</branch>
<branch>
<codelib>3</codelib>
<name>Mall</name>
</branch>
</branches>
<books>
<book type="SF">
<codb>11</codb>
<title>Robots</title>
<authors>
<author>author1 robots</author>
<author>author2 robots</author>
</authors>
<price>10</price>
<stocks>
<branch codelib="1" amount="10"/>
<branch codelib="2" amount="5"/>
<branch codelib="4" amount="15"/>
</stocks>
<from>20</from>
<to>30</to>
</book>
<book type="poetry">
<codb>12</codb>
<title>Poetry book</title>
<authors>
<author>AuthorPoetry</author>
</authors>
<price>14</price>
<stocks>
<branch codelib="1" amount="7"/>
<branch codelib="2" amount="5"/>
</stocks>
<from>25</from>
<to>40</to>
</book>
<book type="children">
<codb>19</codb>
<title>Faitytales</title>
<authors>
<author>AuthorChildren</author>
</authors>
<price>20</price>
<stocks>
<branch codelib="1" amount="10"/>
<branch codelib="3" amount="55"/>
<branch codelib="4" amount="15"/>
</stocks>
<from>70</from>
<to>75</to>
</book>
<book type="literature">
<codb>19</codb>
<title>T</title>
<authors>
<author>A</author>
</authors>
<price>17</price>
<stocks>
<branch codelib="1" amount="40"/>
</stocks>
<from>85</from>
<to>110</to>
</book>
</books>
</library>
Detto questo XML, devo scrivere un SELECT
clausola che utilizzerà query()
, value()
e exist()
2 volte ciascuno, minimo. Non riesco nemmeno a utilizzare query()
e exist()
nello stesso SELECT
, in quanto sembra che la clausola WHERE
non abbia alcun effetto.
Per esempio, voglio recuperare tutti i <branch>
elementi che sono figli del libro con il tipo SF
, ma l'istruzione select
declare @genre varchar(15)
set @genre = 'SF'
SELECT XMLData.query('//branch') from TableA
WHERE XMLData.exist('//book[./@type = sql:variable("@genre")]') = 1
recupera tutti gli <branch>
elementi, non solo quelli del bersaglio libro. Non riesco a capire cosa c'è che non va nella mia selezione. Inoltre, gradirei un piccolo esempio con query()
, exist()
e value()
nella stessa selezione (è possibile avere nidificato select in xml sql?)
Non è quello che voglio, ma devo usare sia query(), value() ed exist() nella stessa istruzione. Ecco perché voglio fare un qualche tipo di filtraggio come in T-SQL, SELECT ... DOVE ... può qualcosa di simile alle istruzioni SELECT nidificate se è possibile. Voglio solo un esempio su come ottenere smth come quello – joanna