mam pewne problemy przy użyciu exist()
i value()
metod w SQL Server 2008.SQL Server XML istnieje()
Moje XML wygląda następująco:
<?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>
Biorąc pod uwagę to XML, muszę napisać SELECT
Klauzula, która będzie używać następujących po sobie 2 razy, co najmniej jeden raz: query()
, value()
i exist()
. Nie mogę nawet użyć query()
i exist()
w tym samym SELECT
, ponieważ wydaje się, że klauzula WHERE
nie ma żadnego wpływu.
Na przykład, chcę, aby pobrać wszystkie <branch>
elementy, które są dzieci książki z typem SF
, ale select
declare @genre varchar(15)
set @genre = 'SF'
SELECT XMLData.query('//branch') from TableA
WHERE XMLData.exist('//book[./@type = sql:variable("@genre")]') = 1
pobiera wszystkie elementy <branch>
, a nie tylko te z ukierunkowane książka. Nie mogę rozgryźć, co jest nie tak z moim wyborem. Również byłbym wdzięczny mały przykład z query()
, exist()
i value()
w tym samym wybrać (jest to możliwe, aby mieć zagnieżdżone wybierz oświadczeń w SQL XML?)
Nie jest to, że chcę, ale muszę użyć zarówno query(), value() i exist() w tej samej instrukcji. Dlatego chcę dokonać filtrowania jak w T-SQL, SELECT ... WHERE ... może coś jak zagnieżdżone instrukcje SELECT, jeśli to możliwe. Chcę tylko przykład, jak osiągnąć coś takiego. – joanna