2011-12-15 26 views
0

我之前沒有在數據庫中使用過XML,所以我需要一些幫助。 我需要從XML中獲取名稱等於「sv-SE」的數值的行數。使用SQL服務器獲得具有條件的XML節點的價值

XML看起來是這樣的:
行1

<cultures> 
    <culture name="sv-SE">Sverige</culture> 
    <culture name="en-GB">Sweden</culture> 
</cultures> 

行2

<cultures> 
    <culture name="sv-SE">Norge</culture> 
    <culture name="en-GB">Norway</culture> 
</cultures> 
從該查詢

預計產出將是

Sverige 
Norge 

當名稱爲「SV- SE「

select tblCountry.name.?? --XmlColumn 
from tblCountry 

回答

3
declare @T table 
(
    ID int identity, 
    XMLCol xml 
) 

insert into @T values 
('<cultures> 
    <culture name="sv-SE">Sverige</culture> 
    <culture name="en-GB">Sweden</culture> 
</cultures>') 

insert into @T values 
('<cultures> 
    <culture name="sv-SE">Norge</culture> 
    <culture name="en-GB">Norway</culture> 
</cultures>') 

select XMLCol.value('(/cultures/culture[@name="sv-SE"])[1]', 'varchar(20)') 
from @T 

如果你想不同的語言,不重寫查詢,您可以使用sql:variable功能。

declare @Lang varchar(5) 
set @Lang = 'sv-SE' 

select XMLCol.value('(/cultures/culture[@name=sql:variable("@Lang")])[1]', 'varchar(20)') 
from @T 
0

這是一個很長一段時間對我來說太... 嘗試:

SELECT xmlCol.query('cultures//culture[@name=sv-SE]') 
FROM myTable 

這裏是doc about querying XML columns with SQLServer2005

+0

這似乎沒有工作。只是得到空值 – Magnus 2011-12-15 13:27:59

+0

是的,我做了一個盲猜....從另一個答案看,我沒有那麼遠,但仍然忘記了一些重要的東西:)我現在給其他答案+1! – LaGrandMere 2011-12-15 13:31:08