萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> 資料庫綜合

SQL Server 數據導出 XML/JSON 實戰:BCP 命令行工具與 FOR XML 原生支援

背景:為何選 BCP?

一次性導出資料給他部門分析,SSIS 過重、導入導出精靈 Bug 多、**BCP (Bulk Copy Program)** 命令行工具最輕量高效。

導出 XML:原生 FOR XML 子句 + BCP

SQL Server 2005+ 原生支援 FOR XML 將關係結果集轉 XML。

BCP "SELECT TOP 30 [bom_no], [LEVEL] 
     FROM [sqladmin].[dbo].[bom] 
     FOR XML PATH, TYPE, ELEMENTS, ROOT('RegionSales')" 
     QUERYOUT "d:\temp\test.XML" -c -t -T -S localhost

參數說明:

  • FOR XML PATH, TYPE, ELEMENTS, ROOT('RegionSales'):生成巢狀元素格式,根節點 RegionSales
  • QUERYOUT:查詢結果導出
  • -c:字元模式 (而非原生二進制)
  • -t:欄位分隔符 (這裡無實際分隔,XML 結構自描述)
  • -T:信任連線 (Windows 驗證)
  • -S localhost:目標伺服器

導出 JSON:SQL Server 原生不支援,替代方案

SQL Server 2016 前無原生 JSON 輸出。常用替代方案:

  1. 應用層序列化 (推薦):用 C#/Java/Python/Node 等讀取資料後 JSON.stringify/Jackson/Gson/Json.NET 輸出
  2. 2. CLR 整合:部署自訂組件在 T-SQL 中呼叫 .NET JSON 序列化 3. FOR XML + XSLT/字串替換:曲線救國,維護成本高 4. 升級至 SQL Server 2016+:原生支援 FOR JSON AUTO/PATH

PowerShell 替代方案 (跨平台腳本化)

# PowerShell 3.0+ 內建 ConvertTo-Json
Invoke-Sqlcmd -Query "SELECT TOP 30 bom_no, LEVEL FROM sqladmin.dbo.bom" `
  -ServerInstance localhost | ConvertTo-Json | Out-File d:\temp\test.json -Encoding UTF8

總結建議

  • XML 導出:BCP + FOR XML 原生高效,無相依性
  • JSON 導出:應用層處理 最靈活標準;或升級 SQL Server 2016+ 使用原生 FOR JSON
  • 自動化腳本化:PowerShell + Invoke-Sqlcmd + ConvertTo-Json 適合排程任務
copyright © 萬盛學電腦網 all rights reserved