網站遷移至 LunarPages 等不提供遠程數據庫連接的虛擬主機時,無法使用 DTS/備份還原,需借助 SQL Server Database Publishing Wizard 生成 T-SQL 腳本遷移。本文詳細記錄工具下載、導出向導全流程、對象類型選擇策略、以及「所有者不一致」導致遷移失敗的核心根因與解決思路。
bf4190_db).sql 文件(後續改名為 .txt 部署)。CREATE TABLE、INSERT、CREATE PROCEDURE、CREATE VIEW 等語句。現象: 導出腳本中表創建語句存在兩種形式:
-- 形式 1:顯式 dbo 架構
CREATE TABLE [dbo].[ads] ( ... )
-- 形式 2:無架構前綴(隱式當前用戶架構)
CREATE TABLE [ads] ( ... )
根因: 開發時建表語句寫法不同導致:
CREATE TABLE [dbo].[ads] ... → 顯式指定 dbo 架構CREATE TABLE [ads] ... → 隱式使用當前用戶默認架構(原服務商賬戶 bf419)遷移後果: 目標服務器賬戶為 xxxx,形式 2 的表會嘗試創建在 [xxxx].[ads],而形式 1 創建在 [dbo].[ads]。若應用代碼查詢 dbo.ads,形式 2 的表將「找不到」;若應用無架構前綴,則訪問 xxxx.ads,形式 1 的表又「找不到」。**架構不一致導致應用層查詢失敗**。
原則: dbo 為數據庫內建擁有者,任何映射為 db_owner 角色的用戶均隱含 dbo 權限,跨服務器、跨賬戶**完全通用**。
操作: 用文本編輯器 (Notepad/EditPlus/VS Code) 打開導出腳本,執行全局替換:
查找:[原賬戶名]. (如 [bf419].)
替換:[dbo].
同時檢查無架構前綴的表,建議統一添加 [dbo]. 前綴(或在部署腳本開頭加 SETUSER 'dbo' / EXECUTE AS USER='dbo',但顯式前綴最穩健)。
下篇將講解:腳本重命名為 .txt 繞過主機限制、FTP 上傳、編寫 ASP.NET 部署頁面 (runsql.aspx) 遠程流式讀取並按 GO 批次執行、連接字符串配置、超時處理、異常捕獲、資源釋放、部署驗證與安全清理。
CREATE TABLE 腳本分離結構與數據。但對於無遠程連接、無雲服務的傳統虛擬主機環境,本文「Publishing Wizard + 腳本修正 + ASP.NET 部署」方案仍具備實戰參考價值。