本地開發完成的 ASP.NET 應用 (含 Membership/Role/Profile 數據) 需部署至共享主機環境,傳統方式面臨:無遠程 SSMS 權限、SQL 腳本兼容性、ASP.NET 服務數據庫安裝需 dbo 權限等難題。SQL Server Hosting Toolkit 隨附的 Database Publishing Wizard (DPW) 完美解決:生成單一 .sql 腳本或調用遠程 Web Service,一鍵重建架構與數據,無需主機商配合安裝組件。
工具獲取與安裝
- 下載:
SQL Server Hosting Toolkit (含 DPW),免費。
- 安裝後集成至 Visual Studio 2005 / VWD Express 方案管理器右鍵菜單,也提供獨立 GUI 與命令行
SqlPubWiz.exe。
兩大部署模式
| 模式 | 流程 | 主機商要求 | 優勢 |
| 生成 .sql 腳本 | 本地 DPW 指向數據庫 → 生成完整架構+數據 .sql → FTP 上傳 → 主機控制面板運行腳本 | 支持 .sql 上傳執行 (絕多數共享主機) | 零依賴、通用、可版本控制、可審計 |
| Web Service 遠程發布 | 本地 DPW 調用遠程 SqlPublish.asmx → 直接重建遠程數據庫 | 需主機商部署發布 Web Service (Toolkit 含免費實現) | 無中間文件、適合自動化 CI/CD |
實戰演練:Personal Starter Kit 部署 (模式一)
步驟 1:準備本地數據庫
- VS/VWD 新建網站 → 選擇 Personal Starter Kit 模板 (默認 SQL Express
App_Data\personal.mdf + aspnetdb.mdf)。
- 運行網站 → ASP.NET 配置 → 創建管理員用戶 → 登錄上傳相片/創建相冊 (驗證數據寫入)。
步驟 2:生成部署腳本
- 方案管理器 → 右鍵
App_Data → 發布到 SQL Server (或右鍵 .mdf 文件)。
- 嚮導配置:
- 目標:生成 SQL 腳本文件。
- 腳本選項:✅ 架構 ✅ 數據 ✅ 索引 ✅ 觸發器 ✅ 全文索引 ✅ 權限/角色 ✅ ASP.NET 服務數據庫 (關鍵:無需 dbo 權限 安裝 Membership/Role/Profile 表與存儲過程)。
- 輸出路徑:
PublishScripts\Personal.sql、PublishScripts\AspNetDB.sql。
- 完成 → 獲得兩個單文件完整部署腳本。
步驟 3:遠程部署
- FTP 上傳
.sql 至主機提供的腳本執行目錄 (或通過控制面板上傳)。
- 主機控制面板 (Plesk/cPanel/自定義) → 數據庫工具 → 運行 SQL 腳本 → 選擇上傳文件 → 執行。
- 驗證:遠程連接字串指向新建數據庫,網站訪問正常。
核心優勢深度解析
- 版本無關:本地 SQL Express 2005 → 遠程 SQL Server 2000/2005/2008,自動處理語法差異。
- ASP.NET 服務數據庫零障礙:內建
aspnet_regsql.sql 需 dbo 權限創建表/存儲過程/作業,共享主機通常拒絕。DPW 將其轉化為普通用戶可執行的腳本 (無 CREATE DATABASE、sp_add_job 等特權操作)。
- 二進制數據完美支持:相片、文件等
varbinary(max) / image 數據自動轉為十六進制字面量 0x...,腳本可直接執行。
- 可審計/可版控:.sql 文件納入 Git,部署歷史可追溯、可回滾、可代碼審查。
命令行自動化 (CI/CD 集成)
SqlPubWiz.exe script -d "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\personal.mdf;Integrated Security=True;User Instance=True"
-f "C:\Deploy\Personal.sql" -schema -data -targetversion 2005
參數:-schema -data -targetversion (2000/2005/2008) -nodrop -noschema 等。
常見問題與解決
| 問題 | 原因 | 解決 |
| 腳本過大 (>50MB) 執行超時 | 單次批次過大 | 分表導出、或使用 bcp/BULK INSERT 導入數據,腳本僅含架構 |
| 遠程執行報錯 "CREATE DATABASE 權限不足" | 腳本含 CREATE DATABASE | DPW 選項取消 "Script Database Create",遠程預建空庫 |
| 編碼亂碼 | 腳本編碼與遠程連接編碼不一致 | 確保腳本 UTF-8 BOM,連接字串無編碼干擾 |
| 主機不支持 .sql 上傳執行 | 安全策略限制 | 改用 Web Service 發布模式,或要求主機商臨時開放 |
Database Publishing Wizard 以「單文件、無特權、跨版本、自動化」四大特性,成為共享主機部署 SQL Server 數據庫的黃金標準。配合現代 CI/CD 流水線,可實現從開發提交到生產上線的全自動化數據庫交付。
- 上一篇文章: SQL Server 2008 商業智能全景:統一存儲、復雜方案構建、全員覆蓋
- 下一篇文章: SQL Server DBA 常用管理腳本大全:版本、配置、空間、索引、統計、對象搜索
Copyright ©
程式碼之家 All Rights Reserved