0
我们在包含XML,并设置为非架构基于XML列这2个SQL Server XQuery查询有什么区别?
的数据可以包含看起来像这样一个节点的倍数例如表中的列:
<eq:Fund>
<v:FundCode>
<v:type>SEDOL</v:type>
<v:value>3049141</v:value>
</v:FundCode>
</eq:Fund>
<eq:Fund>
<v:FundCode>
<v:type>Product Provider Specific</v:type>
<v:value>CASH</v:value>
</v:FundCode>
</eq:Fund>
这个查询返回448行:
WITH XMLNAMESPACES ('http://schema1' as eq, 'http://schema2' as v, DEFAULT 'http://schema3')
select * from xml_request
WHERE xml_request_body.value('contains(string((//v:type)[1]),"SEDOL")','bit') = 1
该查询返回784行(在结果列除去坯料后)
WITH XMLNAMESPACES ('http://schema1' as eq, 'http://schema2' as v, DEFAULT 'http://schema3')
select xml_request.xml_request_ser, xml_request.agency_number, xml_request.policy_holder, xml_request.product,
xml_request_body.query('for $x in /eq:EQuote/eq:Request/eq:Fund where $x/v:FundCode/v:type = "SEDOL" return $x') as result
from xml_request
1)为什么他们返回不同数量的行?第一个查询没有找到元素包含SEDOL的所有行?为什么不?
我猜这可能是由于SEDOL元素可能不是第一个? 2)如何更改第一个查询来查看所有元素,而不仅仅是第一个查询?
第一个表达式是一个**布尔**表达式。所以,它本身不会选择任何节点。您正在使用一些特定的SLQ-Server方法来定义此布尔表达式的评估上下文。第二个是“FLOWR”表达式。 – 2011-01-12 12:44:00