2011-12-22 4 views
0

SQL에 특정 속성이있는 xml을 반환하려고합니다.문서에서 임의의 위치에 xml 노드를 포함하는 행을 선택하십시오.

XML은 다음과 같습니다

<Settings> 
    <Item Name="ColorScheme" Type="XDocument"> 
    <ColorScheme> 
    <ItemStyle Name="element-song" Title="Song" ForeColor="#0538ac" BackColor="#e8f1fa" Media="1" /> 
    <ItemStyle Name="element-song-print" Title="Song (print)" ForeColor="#0538ac" BackColor="" Media="2" /> 
    <ItemStyle Name="element-spot" Title="Spot" ForeColor="#048b27" BackColor="#e9ffee" Media="1" /> 
    <ItemStyle Name="element-spot-print" Title="Spot (print)" ForeColor="#048b27" BackColor="" Media="2" /> 
    <ItemStyle Name="element-programming" Title="Programming" ForeColor="#0538ac" BackColor="#e8f1fa" Media="1" /> 
    <ItemStyle Name="element-programming-print" Title="Programming (print)" ForeColor="#0538ac" BackColor="" Media="2" /> 
    <ItemStyle Name="element-continued-programming" Title="Continued programming" ForeColor="#0538ac" BackColor="#e8f1fa" Media="1" /> 
    <ItemStyle Name="element-continued-programming-print" Title="Continued programming (print)" ForeColor="#0538ac" BackColor="" Media="2" /> 
    </ColorScheme> 
    </Item> 
    <Item Name="SendWeeklyNewAccountEmail" Type="Boolean">False</Item> 
    <Item Name="UseEstimatedDurationsForAnalysis" Type="Boolean">True</Item> 
    <Item Name="CalendarStyle" Type="Int32">1</Item> 
    <Item Name="IncludeAdExForAnalysis" Type="Boolean">True</Item> 
</Settings> 

나는 색상 구성표 속성을 포함하는 다음 필드를 선택하는 데 사용하는 쿼리입니다

SELECT * FROM CustomSettings WITH (NOLOCK)WHERE settings_xml.value('(/Settings/Item/@Name)[1]', 'varchar(25)') = 'ColorScheme' order by 1 desc 

는 그것은 단지를 선택 제가으로 실행하고 문제가 ColorScheme을 첫 번째 필드로 가지는 xml. xml (가능성 있음)에 추가로 위치하면 선택되지 않습니다. 이 질문은 [1]이 (가) 내 검색어에 포함되어있는 것으로 알고 있지만이 부분을 삭제하면 검색어가 일치하지 않습니다. 그렇다면 특정 위치에 있지 않게하려면 무엇을 넣어야합니까?

답변

1
SELECT * 
FROM CustomSettings 
WITH (NOLOCK) 
WHERE settings_xml.value('(/Settings/Item[@name="ColorScheme"]/@Name)[1]', 'varchar(25)') IS NOT NULL 
order by 1 desc 
1
DECLARE @x TABLE (x XML) 

INSERT INTO @x 
VALUES ('<Settings> <Item Name="ColorScheme" Type="XDocument"> <ColorScheme>  <ItemStyle Name="element-song" Title="Song" ForeColor="#0538ac" BackColor="#e8f1fa" Media="1" />  <ItemStyle Name="element-song-print" Title="Song (print)" ForeColor="#0538ac" BackColor="" Media="2" />  <ItemStyle Name="element-spot" Title="Spot" ForeColor="#048b27" BackColor="#e9ffee" Media="1" />  <ItemStyle Name="element-spot-print" Title="Spot (print)" ForeColor="#048b27" BackColor="" Media="2" />  <ItemStyle Name="element-programming" Title="Programming" ForeColor="#0538ac" BackColor="#e8f1fa" Media="1" />  <ItemStyle Name="element-programming-print" Title="Programming (print)" ForeColor="#0538ac" BackColor="" Media="2" />  <ItemStyle Name="element-continued-programming" Title="Continued programming" ForeColor="#0538ac" BackColor="#e8f1fa" Media="1" />  <ItemStyle Name="element-continued-programming-print" Title="Continued programming (print)" ForeColor="#0538ac" BackColor="" Media="2" /> </ColorScheme> </Item> <Item Name="SendWeeklyNewAccountEmail" Type="Boolean">False</Item> <Item Name="UseEstimatedDurationsForAnalysis" Type="Boolean">True</Item> <Item Name="CalendarStyle" Type="Int32">1</Item> <Item Name="IncludeAdExForAnalysis" Type="Boolean">True</Item> </Settings> ') 
, ('<Settings> <Item Name="SendWeeklyNewAccountEmail" Type="Boolean">False</Item> <Item Name="UseEstimatedDurationsForAnalysis" Type="Boolean">True</Item> <Item Name="CalendarStyle" Type="Int32">1</Item> <Item Name="IncludeAdExForAnalysis" Type="Boolean">True</Item> </Settings>)') 
, ('<Settings> <Item Name="IncludeAdExForAnalysis" Type="Boolean">True</Item> <Item Name="ColorScheme" Type="XDocument"> <ColorScheme>  <ItemStyle Name="element-song" Title="Song" ForeColor="#0538ac" BackColor="#e8f1fa" Media="1" />  <ItemStyle Name="element-song-print" Title="Song (print)" ForeColor="#0538ac" BackColor="" Media="2" />  <ItemStyle Name="element-spot" Title="Spot" ForeColor="#048b27" BackColor="#e9ffee" Media="1" />  <ItemStyle Name="element-spot-print" Title="Spot (print)" ForeColor="#048b27" BackColor="" Media="2" />  <ItemStyle Name="element-programming" Title="Programming" ForeColor="#0538ac" BackColor="#e8f1fa" Media="1" />  <ItemStyle Name="element-programming-print" Title="Programming (print)" ForeColor="#0538ac" BackColor="" Media="2" />  <ItemStyle Name="element-continued-programming" Title="Continued programming" ForeColor="#0538ac" BackColor="#e8f1fa" Media="1" />  <ItemStyle Name="element-continued-programming-print" Title="Continued programming (print)" ForeColor="#0538ac" BackColor="" Media="2" /> </ColorScheme> </Item> <Item Name="SendWeeklyNewAccountEmail" Type="Boolean">False</Item> <Item Name="UseEstimatedDurationsForAnalysis" Type="Boolean">True</Item> <Item Name="CalendarStyle" Type="Int32">1</Item> </Settings> ') 


SELECT * 
FROM @x x1 
WHERE x1.x.exist('(/Settings/Item[@Name="ColorScheme"])') = 1 
관련 문제