Sql-Server
更新格式錯誤的 XML 以允許解析
我繼承了一個生產系統,需要進行一些微調才能輕鬆提取結果集。一條記錄被添加到包含 XML 欄位的表中,其內容類似於以下內容:
<PROG>PROGX_</PROG><STNTYPE>LEAKTEST</STNTYPE><STNID>S1</STNID><TRCODE>SN_REQUEST</TRCODE><OPERATORID>222</OPERATORID><PARTID>PARTID</PARTID><TRSTATUS>0000</TRSTATUS><TRTEXT>TEST OK</TRTEXT><T1_USL>0.45</T1_USL><T1_LSL>-0.45</T1_LSL><T1_RESULT>05,CC/M</T1_RESULT><T1_STATUS>OK</T1_STATUS><OVERALL_RESULT>1</OVERALL_RESULT><OVERALL_STATUS>OK</OVERALL_STATUS>
但是,我相信 XML 的格式是無效的,我希望能夠通過添加根和更好地分組來清理它。類似於以下內容:
<RESULTSET> <PROG>PROGX_</PROG> <STNTYPE>LEAKTEST</STNTYPE> <STNID>S1</STNID> ...etc... <OVERALL_STATUS>OK</OVERALL_STATUS> </RESULTSET>
(當時的想法是我可以使用 SQL 視圖來正確拆分它)。
如果可能的話,有什麼想法嗎?我是 SQL 上的 XML 新手。
您無需添加根元素即可在 SQL Server 上獲取此資訊:
create table tbl (foo xml); insert into tbl values ('<PROG>PROGX_</PROG><STNTYPE>LEAKTEST</STNTYPE><STNID>S1</STNID><TRCODE>SN_REQUEST</TRCODE><OPERATORID>222</OPERATORID><PARTID>PARTID</PARTID><TRSTATUS>0000</TRSTATUS><TRTEXT>TEST OK</TRTEXT><T1_USL>0.45</T1_USL><T1_LSL>-0.45</T1_LSL><T1_RESULT>05,CC/M</T1_RESULT><T1_STATUS>OK</T1_STATUS><OVERALL_RESULT>1</OVERALL_RESULT><OVERALL_STATUS>OK</OVERALL_STATUS> ');
select foo.value('(/PROG)[1]', 'nvarchar(100)') PROG, foo.value('(/STNTYPE)[1]', 'nvarchar(100)') STNTYPE, foo.value('(/STNID)[1]', 'nvarchar(100)') STNID from tbl; GO
程序 | STN 類型 | STNID :----- | :------- | :---- PROGX_ | 洩漏測試 | S1
db<>在這裡擺弄