2017-10-11 33 views
-1

有人可以請更多的細節究竟SELECT (STUFF SELECT...))FOR XML PATH(''), TYPE).value('.','NVARCHAR(max)')什麼是XML路徑? <code>XmlPath('')</code>到<strong>連擊列數據</strong>分爲單列:

從我所知道的解釋。 Stuff用於刪除字符串連接後的第一個','。

那麼TYPE).value('.','NVARCHAR(max)')用於什麼?

+2

可能的重複[如何Stuff和'爲XML路徑'在Sql Server中工作](https://stackoverflow.com/questions/31211506/how-stuff-and-for-xml-path-work-in-sql -server) –

+0

@ KenY-N爲什麼它可以在我的數據庫上執行得很好? –

+0

我只是想問,並獲得正確的信息,因爲我是新的初學者。 –

回答

1

那麼TYPE).value('.','NVARCHAR(max)')用於什麼?

FOR XML PATH的基本知識,你可以找到很多的問題/答案對SO(例如1,或2)。

我將專注於TYPE指令。考慮其連接了字符串派生表dt下面的T-SQL語句:

SELECT 
    [text()]=dt.x+';' 
FROM 
    (
     VALUES('text > blabla'), 
       ('text < blabla'), 
       ('f&m') 
    ) AS dt(x) 
FOR XML 
    PATH(''); 

結果是:

text &gt; blabla;text &lt; blabla;f&amp;m; 

你會看到><&被取代&gt;&lt;&amp;。特殊字符(XML預定義實體)將被替換。

您可以通過指定TYPE指令將其禁用,該指令將其導出爲XML而不是文本,然後從XML中獲取字符串值。從生成的XML中獲取此字符串值可以使用value()方法完成。

在上面的例子中使用TYPE指令:

SELECT 
    (
     SELECT 
      [text()]=dt.x+';' 
     FROM 
      (
       VALUES('text > blabla'), 
         ('text < blabla'), 
         ('f&m') 
      ) AS dt(x) 
     FOR XML 
      PATH(''), TYPE 
    ).value('.','NVARCHAR(MAX)'); 

你會得到:

text > blabla;text < blabla;f&m; 

您可以看到XML特殊字符不被取代。