SQL查詢-將列轉換成字符串(for xml path)


背景

最近做一報表,因為查詢的SQL很長很復雜,導致直接查詢出現異常,后來想到將大量重復的只是查詢條件不同的子查詢放到函數中去做,無奈需要的參數不能傳進函數中,因為參數格式類似如:'ProjGUID1','ProjGUID2' 這樣,這是報表工具生成的,無法修改。現在就要想辦法讓參數能傳進函數中或是換用其他的方式。

思路

1、首先想到的是用存儲過程,但是在報表工具中調試不通,存儲過程不能得到有效的執行,可能是根本就不支持存儲過程;

2、將參數作為in的條件,查詢出符合條件的GUID,返回的是一個表,然后循環表的行記錄,拼接GUID傳入函數,但是報表工具中的SQL不支持定義變量和臨時表,此方法也行不通;

3、利用SQL語句的For Xml 將GUID查詢成一個XML結構的字符串,但傳入函數中后解析該XML需要用到系統存儲過程sp_xml_preparedocument ,函數中並不支持調用存儲過程,此路也不通。關於SQL中解析XML可以參見我之前的博文《使用sp_xml_preparedocument處理XML文檔》。

解決方法

上面說到了SQL的For Xml可以將查詢的列轉換成XML結構的字符串,還有一種方法可以將查詢的字段轉換成以特定符號隔開的字符串,那就是For Xml Path:

SELECT TOP 2 CONVERT(VARCHAR(40),ProjGUID)+',' FROM p_Project FOR XML PATH('')

上面的語句得到的結果如下:

BAA95B67-FC41-4A78-AF1C-014BBE0AC368,37641496-23AA-46CB-9817-027AA120F5C6,

至此問題解決,這樣的字符串是可以傳進函數的,只需將最后的逗號去掉即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM