我有一个表XMLInformation
,其中包含以下列:ID
,detailID
,XML
,RunDate
和XMLDetail
。
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 />
答案 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