2011-08-30 81 views
1

在SQL Server 2008 R2,如何使用節點值之間的空格返回xml值的文本()?

考慮下面的XML

DECLARE @xml xml = '<data><fr>Chambre standard</fr><en>Standard room</en></data>'; 

我怎樣才能返回以下字符串:

Chambre standard Standard room 

目前,我只能返回字符串拼接在一起,而沒有通過使用

SELECT @xml.query('//*/text()').value('.', 'varchar(max)') 

W¯¯任何空間返回

Chambre standardStandard room 

但我需要在那裏插入一個空格。

如何在節點文本之間插入空格?

+0

請問元素有除了剛纔附加元素? – 8kb

+0

實際上可能不僅僅是fr和en(更多語言),但您的解決方案可以暫時工作。 –

+0

我修改了我認爲是改進的臨時解決方案的代碼。 – 8kb

回答

2

您可以使用.nodes()碎化您的XML。

select T.N.value('local-name(.)', 'varchar(128)') as Name, 
     T.N.value('.', 'varchar(max)') as Value 
from @xml.nodes('/data/*') as T(N); 

結果:

Name Value 
fr Chambre standard 
en Standard room 

然後你可以使用for xml path('')把它重新走到一起。

select stuff((select ' '+T.N.value('.', 'varchar(max)') 
       from @xml.nodes('/data/*') as T(N) 
       for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '') 

結果:

(No column name) 
Chambre standard Standard room 
+0

+1。我知道有一種方法可以做到這一點...... – 8kb

+0

有沒有更詳細地解釋「本地名稱」的在線文檔? – 8kb

+1

@ 8kb - 看看這裏。 http://msdn.microsoft.com/en-us/library/ms190650.aspx –

相關問題