2017-03-31 78 views
2

在SQL Server 2012中(SP1),什麼是採取看起來像這樣的數據的最佳方式:最好的辦法

declare @t table (
    id int, 
    data xml 
) 

insert into @t values (1, '<node/>'), (2, '<node/>') 

id data 
1 <node /> 
2 <node /> 

,並把它變成

id data 
1 <root><node /></root> 
2 <root><node /></root> 

有沒有比將其轉換爲字符數據更有效的方法,添加節點開始和結束標記,然後將其轉換回xml?我在更大的數據集上處理這個問題,所以這只是一個簡單的例子。

回答

3

您可以使用簡單的XQuery在查詢結果中添加<root>父項。涉及XML和VARCHAR數據類型之間沒有回往復轉換:

SELECT id, data.query('<root>{.}</root>') AS data 
FROM @t 

快速測試:http://rextester.com/RLZ30365

簡要說明:

  • {}:表明兩者之間的文本應視爲XQuery表達式而不是文字
  • .:參考當前上下文節點,在這種情況下是<node />
4

還有一個方法(但我最喜歡的是har07的答案)

declare @t table (
    id int, 
    data xml 
) 

insert into @t values (1, '<node/>'), (2, '<node/>'); 

SELECT id 
     ,(SELECT data AS [*] FOR XML PATH('root'),TYPE) 
FROM @t; 
+0

總是好的選擇。但既然你更喜歡har07的答案,而且它非常適合,我會隨之而去。 – jep

+0

@jep耶!選項非常棒! (我必須查找* cromulent *,thx爲新單詞:-D)。這僅僅是爲了辛普森一家的極客們還是可以在每天的談話中使用的東西?) – Shnugo

+0

_Cromulent_是一個可以模仿任何人的詞彙的詞,辛普森一家的粉絲。 – jep