2016-12-14 44 views
1

我想連接從一個子查詢到字符串的一些值。但是有些事情我不明白。爲什麼標籤在添加'時消失; '字段與'爲XML路徑'結合?

當我使用這個SQL:

select (
    select t1.value 
--  + '; ' 
    from Table1 t1 
     join Table2 t2 on t1.xId=t2.xId and t1.TypeId in (31,33) 
    where t2.pId=1001 
    for xml PATH('') 
) 
as ValuesAsString 

我得到:

<value>value 1</value><value>value 2</value> 

但是當我刪除 ' - ' 並再次運行查詢,輸出變爲:

value 1; value 2; 

爲什麼刪除了xml標籤?

我使用SQL Server 2008

回答

1

嘗試不中的XML功能運行內部查詢。在原始查詢中,由於您直接從名爲value的列中進行選擇,因此它會生成一個名爲value的單列結果集。

在更新的查詢,你得到一個無名列的結果集,因爲你選擇表達值。

因此,標籤名稱基於列名稱(或任何應用的別名),並且在更新的示例中,該列沒有名稱。由於沒有辦法在XML中擁有未命名的元素,所以元素標籤被省略。

select (
    select t1.value 
     + '; ' as fruitbat 
    from Table1 t1 
     join Table2 t2 on t1.xId=t2.xId and t1.TypeId in (31,33) 
    where t2.pId=1001 
    for xml PATH('') 
) 
as ValuesAsString 

將生成XML,並在<fruitbat>元素中包含您的值。

0

因爲該列的名稱被用作FOR XML PATH('')中的元素名稱。當你有一個計算表達式並且你沒有提供列別名(... AS alias_namealias_name=...)時,列名不存在,因此沒有元素名被渲染(一個空的XML元素名是無效的)。

要刪除的列名,選擇列作爲[text()]財產,像

... 
select [text()]=t1.value 
... 

更多信息:12

相關問題