前置:啟用 xp_cmdshell
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
方式一:檔案部署 — 直接執行 .dtsx
EXEC xp_cmdshell 'dtexec /f "C:\Packages\ETL_Order.dtsx"';
- 適用:獨立套件、無參數化、簡單排程
- 缺點:路徑硬編碼、難以管理版本/環境變數、安全性較低
方式二:專案部署 — 部署至 SSISDB (SQL Server 2012+ 推薦)
部署步驟 (SSDT/VS)
- 專案屬性 → Deployment Target Version 選對應 SQL 版本
- 右鍵專案 → Deploy → 選 SSISDB → 伺服器名、路徑 (如
/Projects/ETL)
- 加密等級:
EncryptAllWithPassword 或 EncryptSensitiveWithPassword
T-SQL 呼叫 (catalog.create_execution + start_execution)
DECLARE @execId BIGINT;
EXEC [SSISDB].[catalog].[create_execution]
@folder_name = N'ETL',
@project_name = N'OrderProject',
@package_name = N'ETL_Order.dtsx',
@use32bitruntime = 0,
@runinscaleout = 0,
@execution_id = @execId OUTPUT;
-- 設定參數 (可選)
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
@execution_id = @execId, @object_type = 30, -- 30=Package, 20=Project
@parameter_name = N'SourcePath', @parameter_value = N'D:\Data\';
-- 執行
EXEC [SSISDB].[catalog].[start_execution] @execution_id = @execId;
舊版相容:dtexec /DTS (MSDB 存儲)
EXEC xp_cmdshell 'dtexec /DTS "\MSDB\ETL_Order" /SERVER "MyServer" /MAXCONCURRENT "-1" /CHECKPOINTING OFF /REPORTING V';
- 部署:SSDT 產生部署資訊清單 → 雙擊 → 部署至 SQL Server (MSDB)
- 或 SSMS → Integration Services → 預存套件 → MSDB → 匯入
- 保護等級:
RelyOnServerStorageAndRoles
關鍵差異對比
| 維度 | 檔案部署 (/f) | 專案部署 (SSISDB) | MSDB 部署 (/DTS) |
| 版本需求 | 所有 | 2012+ | 2005+ |
| 參數化/環境變數 | ❌ | ✅ 完整支援 | ⚠️ 有限 |
| 版本控管/專案層級 | ❌ | ✅ 專案/套件版本 | ❌ |
| 執行日誌/報表 | ❌ | ✅ SSISDB 內建 | ⚠️ 需自建 |
| Scale Out 執行 | ❌ | ✅ | ❌ |
| 安全性/加密 | 檔案層級 | 資料庫層級 + 角色 | 資料庫層級 |
⚠️ 常見錯誤與解決
- 加密錯誤 0x8009000B:部署/匯入時保護等級不匹配 → 重新部署並選正確等級
- xp_cmdshell 禁用:同上啟用
- 32/64 位不匹配:
/use32bitruntime 或部署目標版本
- 權限不足:SQL Agent 執行帳戶需有檔案/資料庫存取權