首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 利用 BCP 與存儲過程依查詢結果產生 XML 檔案

     編輯:MySQL 資料庫相關知識

解決 bcp 命令找不到問題(需將 C:\Program Files\Microsoft SQL Server\80\Tools\Binn 加入系統 PATH),並提供完整存儲過程 P_ZehuaSaveXML,依中間表 TB_TABLECOLUMN_T 定義,將多張表資料匯出為標準 XML 格式。

環境修復

右鍵「我的電腦」→ 內容 → 進階 → 環境變數
系統變數 Path 編輯,末尾加入:
C:\Program Files\Microsoft SQL Server\80\Tools\BINN

存儲過程核心邏輯

CREATE PROC P_ZehuaSaveXML
  @TableCodeS VARCHAR(8000),  -- 逗號分隔表代碼,如 'WQ_STINFO_B,WQ_PHY_D'
  @fname VARCHAR(1000) = 'c:\tmp.xml'
AS
BEGIN
  DECLARE @sql NVARCHAR(200), @sql1 VARCHAR(400)
  DECLARE @cnt INT, @Table_Name VARCHAR(20)
  DECLARE @i INT, @TableCode VARCHAR(20)
  DECLARE @err INT, @src VARCHAR(255), @desc VARCHAR(255)

  CREATE TABLE ##t (re NVARCHAR(4000))
  INSERT ##t SELECT ''
  INSERT ##t SELECT ''

  SET @i = CHARINDEX(',', @TableCodeS)
  WHILE @i > 0
  BEGIN
    SET @TableCode = LEFT(@TableCodeS, @i-1)
    -- 動態 SQL 查詢中間表取得主鍵欄位、排序欄位
    SET @sql = N'SELECT @cnt=COUNT(*), @Table_Name=MAX(Table_Name) FROM ('
    SET @sql = @sql + N'SELECT TOP 100 PERCENT * FROM TB_TABLECOLUMN_T WHERE '
    SET @sql = @sql + N'TABLE_CODE=''' + @TableCode + ''' AND COLUMNS_ISKEY=''√'' '
    SET @sql = @sql + N'ORDER BY COLUMNS_SORT)'
    -- ... 後續邏輯組裝 XML 節點、寫入 ##t、最後 BCP 匯出檔案
  END
END

關鍵技術點

  • 使用全域暫存表 ##t 累積 XML 字串片段。
  • 動態 SQL 解析中間表元資料,支援多表批次匯出。
  • 最終搭配 bcp 工具將 ##t 內容匯出為實體 XML 檔。
  • 編碼採 gb2312,符合中文環境需求。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved