首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

在 SQL Server 預存程序中執行 DTS 套件:sp_OA 系列擴展預存程序實作 COM 物件呼叫

     編輯:關於SqlServer

DTS 套件觸發方式比較

方式優點缺點
SQL Server Job + sp_start_job簡單、內建非同步、無法直接取得成功/失敗狀態,需輪詢 sp_help_job
用戶端載入 DTS DLL邏輯在用戶端部署升級困難、版本衝突、安全性風險
伺服器端 sp_OA 呼叫 DTS COM 物件同步執行、可取得傳回值、集中管理、避免用戶端部署程式碼較複雜、需啟用 OLE Automation
VBScript 包裝後轉換開發除錯容易需轉換為 sp_OA 語法

核心實作流程:VBScript 先行原型 → sp_OA 轉換

1. VBScript 原型 (參考圖 A:DTS 物件庫參考)

' 需在專案加入參考:Microsoft DTSPackage Object Library
Dim pkg
Set pkg = CreateObject("DTS.Package")
pkg.LoadFromStorageFile _
    "SQL Server", "ServerName", "User", "Pwd", _
    DTSSStgFlag_Default, "", "", "", "PackageName", ""
pkg.Execute
' 檢查 pkg.ExecutionResult 判斷成敗

2. sp_OA 系統預存程序對應

  • sp_OACreate ↔ CreateObject:建立 COM 物件實例,傳回物件 Token (整數)。
  • sp_OAMethod ↔ 物件方法呼叫:EXEC sp_OAMethod @token, 'MethodName', @output OUT, param1, param2...
  • sp_OAGetProperty / sp_OASetProperty ↔ 讀寫屬性。
  • sp_OADestroy:釋放物件 Token。

3. T-SQL 完整範例:同步執行 DTS 套件並取得結果

DECLARE @hr INT, @pkgToken INT, @result INT, @errMsg VARCHAR(255);

-- 1. 建立 DTS.Package 物件
EXEC @hr = sp_OACreate 'DTS.Package', @pkgToken OUT;
IF @hr <> 0 GOTO ErrorHandler;

-- 2. 從 SQL Server 儲存載入套件
EXEC @hr = sp_OAMethod @pkgToken, 'LoadFromStorageFile', NULL,
    'SQL Server',           -- 來源類型
    'MyServer',             -- 伺服器名稱
    'sa',                   -- 使用者
    'password',             -- 密碼
    0,                      -- DTSSStgFlag_Default
    '', '', '',             -- 保留參數
    'MyPackage',            -- 套件名稱
    '';                     -- 套件密碼 (無則空字串)
IF @hr <> 0 GOTO ErrorHandler;

-- 3. 執行套件
EXEC @hr = sp_OAMethod @pkgToken, 'Execute';
IF @hr <> 0 GOTO ErrorHandler;

-- 4. 取得執行結果
EXEC @hr = sp_OAGetProperty @pkgToken, 'ExecutionResult', @result OUT;
IF @hr <> 0 GOTO ErrorHandler;

-- 5. 釋放物件
EXEC sp_OADestroy @pkgToken;

-- 6. 判斷結果
IF @result = 1  -- DTSSExecResult_Success
    PRINT 'DTS 套件執行成功';
ELSE
    PRINT 'DTS 套件執行失敗,錯誤碼:' + CAST(@result AS VARCHAR);

RETURN;

ErrorHandler:
EXEC sp_OAGetErrorInfo @pkgToken, @errMsg OUT;
PRINT 'sp_OA 錯誤:' + ISNULL(@errMsg, '未知');
EXEC sp_OADestroy @pkgToken;
RETURN;

啟用條件與安全性

  • 需啟用伺服器選項 Ole Automation Procedures:
    sp_configure 'Ole Automation Procedures', 1; RECONFIGURE;
  • 僅 sysadmin 可執行 sp_OA*,嚴格控制權限。
  • DTS 套件儲存於 SQL Server (msdb) 或結構化儲存檔案,建議使用版本控管。
  • SQL Server 2005+ 建議改用 SSIS + dtutil / SSISDB 目錄部署與執行,DTS 已淘汰。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved