有人可以請更多的細節究竟SELECT (STUFF SELECT...))FOR XML PATH(''), TYPE).value('.','NVARCHAR(max)')
什麼是XML路徑? <code>XmlPath('')</code>到<strong>連擊列數據</strong>分爲單列:
從我所知道的解釋。 Stuff
是用於刪除字符串連接後的第一個','。
那麼TYPE).value('.','NVARCHAR(max)')
用於什麼?
有人可以請更多的細節究竟SELECT (STUFF SELECT...))FOR XML PATH(''), TYPE).value('.','NVARCHAR(max)')
什麼是XML路徑? <code>XmlPath('')</code>到<strong>連擊列數據</strong>分爲單列:
從我所知道的解釋。 Stuff
是用於刪除字符串連接後的第一個','。
那麼TYPE).value('.','NVARCHAR(max)')
用於什麼?
那麼
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 > blabla;text < blabla;f&m;
你會看到>
,<
和&
被取代>
,<
和&
。特殊字符(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特殊字符不被取代。
可能的重複[如何Stuff和'爲XML路徑'在Sql Server中工作](https://stackoverflow.com/questions/31211506/how-stuff-and-for-xml-path-work-in-sql -server) –
@ KenY-N爲什麼它可以在我的數據庫上執行得很好? –
我只是想問,並獲得正確的信息,因爲我是新的初學者。 –