2014-04-08 49 views
1

我正在開發基於sql server 2012的應用程序。 我是SQl服務器的新手。但要求是使用它。 我正在使用的表中包含一個XML數據類型列。但是,包含在該列中的數據可能會因xml元素而異。在唯一的共同點是根:舉例來說,這是一個簡單的數據:SQL Server根據用戶輸入值的內容選擇XML列

<Tags> 
    <key1>Value1</key1> 
    <key2>Value2</key2> 
    <key3>Value3</key3> 
    <key4>Value4</key4> 
    <key5>Value5</key5> 
    <key6>Value6</key6> 
</Tags> 

我想要做的就是查詢整個表,並獲取將匹配特定的鍵,並通過發送一個特定值的記錄用戶。

請幫助我。

+2

請參考[此](http://stackoverflow.com/questions/4815836/how-do-you-read-xml-column-in-sql-server-2008),[此](HTTP ://stackoverflow.com/questions/13195922/how-to-query-xml-column-in-tsql)和[this](http://stackoverflow.com/questions/2988122/how-to-query-on- xml-column-in-sql-server-2008)會給你一個起點。 –

+0

@huMptyduMpty:用示例查詢xml元素是已知的。就我而言,我甚至不知道哪個元素將被查詢。我同意這些例子給出了可以做什麼的線索。 – Arsene

回答

1

好吧,這聽起來像你需要使用一些變量來建立一個XQuery,是嗎?所以,假設你構建了一個存儲過程或者一些需要一對字符串參數的鍵和值,你可以使用下面的例子,我已經敲入了SQL Fiddle,所以你可以試試看。

DECLARE @key nvarchar(20) 
DECLARE @value nvarchar(20) 
SET @key = N'key5' 
SET @value = N'Value5' 

SELECT 
    TagValue = T1.xmlcol.value('(/Tags/*[local-name()=sql:variable("@key")])[1]', 'varchar(10)') 
FROM 
    dbo.T1 
WHERE 
    T1.xmlcol.exist('/Tags/*[local-name()=sql:variable("@key")][text() = "Value5"]') = 1 
+0

儘管SQLFiddle剛死了 - 希望不是因爲我!但是當它備份時,它包含一個工作示例,其中包含上面的示例XML,您應該從中推斷出適用於您的解決方案。 –

+0

謝謝。有用。 – Arsene

+0

很酷。如果你接受這個答案,如果它的竅門,將不勝感激:) –