我必須使用exist()
和value()
方法,在SQL Server 2008中SQL Server中的XML存在()
我的XML看起來像這樣一些問題:
<?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>
鑑於這種XML,我必須寫SELECT
子句將使用query()
,value()
和exist()
各2次,最小值。我甚至不能在相同的SELECT
中使用query()
和exist()
,因爲看來WHERE
子句沒有任何影響。
例如,我要檢索的所有<branch>
元素是書的類型SF
的孩子,但select語句
declare @genre varchar(15)
set @genre = 'SF'
SELECT XMLData.query('//branch') from TableA
WHERE XMLData.exist('//book[./@type = sql:variable("@genre")]') = 1
檢索所有<branch>
元素,而不僅僅是從目標的那些書。我無法弄清楚我的選擇有什麼問題。另外,我很感激query()
,exist()
和value()
在相同的選擇(是否有可能嵌套在SQL XML select語句?)
這不是我想要的,但我必須在同一個語句中同時使用query(),value()和exist()。這就是爲什麼我想做一些像T-SQL,SELECT ... WHERE ...那樣的過濾,如果可能的話,可能會像嵌套的SELECT語句那樣。我只想要一個關於如何實現這樣的示例的示例 – joanna