2015-04-16 125 views
0

我使用SQL Server 2012的,我有以下代碼檢查是否的一個屬性包含給定值或不

DECLARE @p varchar(4) 
    SET @p = ext1 

    DECLARE @x xml 
    SET @x = '<labels defaultText = "Some text 2012">  
       <label text = "Some text1" />  
       <label text = "Some text2" />  
       <label text = "Some text3" /> 
       </labels>' 

請幫忙寫一個XPath/XQuery的查詢,以檢查是否defaultText值或一個文本的值包含@p或不包含。在這個例子中,結果將是真實的,因爲第一個標籤中文本的值包含ext1。

+0

你還可以添加你到目前爲止嘗試過的sql查詢嗎? – ughai

回答

1

您可以使用.nodes()遍歷<label>並使用.value()獲取根節點屬性的值以及屬性的值<label>。像這樣的東西

DECLARE @p varchar(4) 
SET @p = 'ext1' 

DECLARE @x xml 
SET @x = '<labels defaultText = "Some text 2012">  
    <label text = "Some text1" />  
    <label text = "Some text2" />  
    <label text = "Some text3" /> 
    </labels>' 

DECLARE @check BIT = 0 

SELECT TOP 1 @check = 1 
FROM @x.nodes('labels/label') as t(c) 
WHERE c.value('@text','VARCHAR(20)') LIKE '%' + @p +'%' 
    OR @x.value('/labels[1]/@defaultText','VARCHAR(20)') LIKE '%' + @p +'%' 

SELECT @check 
+0

它的工作原理,謝謝 –

相關問題