如何在包含XML数据的sql server中的表的列中搜索特定单词

时间:2014-05-07 06:55:36

标签: sql-server-2008

我有一个表XMLInformation,其中包含以下列:IDdetailIDXMLRunDateXMLDetail

XMLDetail列包含XML信息。我想从XML中搜索特定的单词。下面是XML之一。我想创建一个查询,它将返回包含XML中包含单词GU的XML的所有行。

<InitialResponse transactionKey="0000000001025000000080001">
<AssesmentComplete>
<OutputAddress isStandardized="true" addressType="Current">
  <HybridAddress>
    <AddressLine>Street Address Address Line</AddressLine>
    <City>Gurgaon</City>
    <State>Haryana</State>
    <ZIP>122001</ZIP>
    <ZIP4>122002</ZIP4>
  </HybridAddress>
</OutputAddress>
<ID>36</ID>
<ID>43</ID>
<ID>44</ID>
<ID>45</ID>
<ID>47</ID>
<ID>49</ID>
<ID>75</ID>
<ID>GU</ID>
<ID>NH</ID>
<Score>0</Score>
<MatchAssesment>0</MatchAssesment>
<FraudIndicator />
<AtomicScores />

3 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

;WITH XmlIds AS
(
    SELECT 
        xi.ID, xi.DetailID, xi.RunDate,
        IDValue = XCol.value('.', 'varchaR(50)')
    FROM 
        dbo.XMLInformation xi
    CROSS APPLY
        XMLDetail.nodes('/InitialResponse/AssesmentComplete/ID') AS XTbl(XCol)
)
SELECT *
FROM XmlIds
WHERE IDValue = 'GU'

基本上,CTE从XML内容中获取所有<ID>值并将它们与基表中的其他列匹配,然后您可以从IDValue这些列表中选择您需要的值< / p>

旁注:正确的拼写是评估(两次使用两个 s个字母。)

答案 1 :(得分:0)

试试这个:

SELECT * FROM XMLInformation WHERE CAST(XMLdetail.query('//.="GU"')  AS VARCHAR) ='true'

答案 2 :(得分:0)

使用exist() Method (xml Data Type)

会更好
select *
from XMLInformation
where XMLDetail.exist('//*[text() ="GU"]') = 1