前言
`sp_makewebtask` 是 SQL Server 7.0/2000 內建的靜態頁面產生工具,可將查詢結果直接輸出為 HTML 檔案,支援排程、模板、超連結、分頁等豐富功能。本文詳細整理所有參數與實務應用場景。
核心語法
sp_makewebtask
[@outputfile =] 'outputfile',
[@query =] 'query'
[, [@fixedfont =] fixedfont]
[, [@bold =] bold]
[, [@italic =] italic]
[, [@colheaders =] colheaders]
[, [@lastupdated =] lastupdated]
[, [@HTMLHeader =] HTMLHeader]
[, [@username =] username]
[, [@dbname =] dbname]
[, [@templatefile =] 'templatefile']
[, [@webpagetitle =] 'webpagetitle']
[, [@resultstitle =] 'resultstitle']
[, [@URL =] 'URL', [@reftext =] 'reftext']
[, [@table_urls =] table_urls, [@url_query =] 'url_query']
[, [@whentype =] whentype]
[, [@targetdate =] targetdate]
[, [@targettime =] targettime]
[, [@dayflags =] dayflags]
[, [@numunits =] numunits]
[, [@unittype =] unittype]
[, [@procname =] procname]
[, [@maketask =] maketask]
[, [@rowcnt =] rowcnt]
[, [@tabborder =] tabborder]
[, [@singlerow =] singlerow]
[, [@blobfmt =] blobfmt]
[, [@nrowsperpage =] nrowsperpage]
[, [@datachg =] datachg]
[, [@charset =] charset]
[, [@codepage =] codepage]
關鍵參數詳細說明
| 參數 | 說明 | 預設值 |
| outputfile | 輸出檔案完整路徑,多檔案時自動加序號 | 必要 |
| query | 產生頁面的 SQL 查詢,支援多查詢 | 必要 |
| templatefile | HTX 模板檔路徑,啟用後格式參數失效 | 無 |
| whentype | 執行時機:1=立即執行刪除、2=排程一次、3=每周、4=間隔、5=手動、10=資料異動觸發 | 1 |
| singlerow | 1=每筆記錄產生一檔案 | 0 |
| nrowsperpage | 每頁最大筆數,超過自動分頁含導覽連結 | 0(不分頁) |
| blobfmt | ntext/image 欄位獨立輸出檔案並產生超連結,格式:`%n% FILE=... TPLT=... URL=...` | 空 |
| charset / codepage | 中文請設 `gb2312` / `936`(簡體)或 `big5` / `950`(繁體) | 依伺服器 |
| maketask | 0=只建立 SP、1=加密 SP+建立作業、2=不加密 SP+建立作業 | 2 |
排程類型(whentype)速查表
| 值 | 行為 | 需搭配參數 |
| 1 | 立即執行,完成後刪除任務 | 無 |
| 2 | 建立任務,targetdate/targettime 指定時間執行一次 | targetdate, targettime |
| 3 | 每周執行,dayflags 指定星期 | targetdate, targettime, dayflags |
| 4 | 固定間隔執行 | targetdate, targettime, numunits, unittype |
| 5 | 建立任務不排程,手動 sp_runwebtask 執行 | procname |
| 10 | 資料異動觸發(datachg 指定資料表/欄位) | datachg |
相關系統存儲程序
- `sp_runwebtask [@procname=] 'name' [, @outputfile=] 'file'` — 手動執行任務
- `sp_dropwebtask {[@procname=] 'name' | [@outputfile=] 'file'}` — 刪除任務
- `sp_enumcodepages` — 列出所有支援的字碼頁與字元集對照
實務應用範例:每日自動產生報表
EXEC sp_makewebtask
@outputfile = 'D:\Reports\DailySales.htm',
@query = 'SELECT * FROM v_DailySales WHERE SaleDate = CONVERT(DATE, GETDATE())',
@whentype = 4, @numunits = 1, @unittype = 2, -- 每天
@targettime = '060000', -- 凌晨 6 點
@templatefile = 'D:\Templates\SalesReport.htx',
@charset = 'big5', @codepage = '950',
@procname = 'GenDailySalesReport',
@maketask = 2
注意事項
- SQL Server 2008 起標記為淘汰功能,新專案請改用 SSRS、應用層渲染或 Power Automate
- 輸出目錄需 SQL Server 服務帳號寫入權限
- 大量資料輸出時注意磁碟空間與執行逾時
- 中文編碼務必正確設定 `charset`/`codepage`,否則產生亂碼