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

SQL Server 預存程序呼叫 COM 元件完整教學

     編輯:關於SqlServer

動機

T-SQL 功能強大,但某些情境(如複雜運算、外部 API 呼叫)仍受限。SQL Server 提供 sp_OACreate 等 OLE Automation 預存程序,讓預存程序能像 ASP 一樣建立並呼叫 COM 物件。

建立測試 COM 元件(VB6)

' 專案名稱:testSQLCOM
' 類別名稱:TestMath
Public Function AddMe(a As Long, b As Long) As Long
    AddMe = a + b
End Function

編譯產生 testSQLCOM.dll 並註冊至系統。

在預存程序中呼叫

DECLARE @obj INT, @ret INT, @hr INT, @errSrc VARCHAR(255), @errDesc VARCHAR(255);

-- 1. 建立 COM 實例
EXEC @hr = sp_OACreate 'testSQLCOM.TestMath', @obj OUT;
IF @hr <> 0 BEGIN
    EXEC sp_OAGetErrorInfo @obj, @errSrc OUT, @errDesc OUT;
    PRINT '建立失敗: ' + @errSrc + ' ' + @errDesc;
    RETURN;
END

-- 2. 呼叫方法
EXEC @hr = sp_OAMethod @obj, 'AddMe', @ret OUT, 100, 200;
IF @hr <> 0 BEGIN
    EXEC sp_OAGetErrorInfo @obj, @errSrc OUT, @errDesc OUT;
    PRINT '呼叫失敗: ' + @errSrc + ' ' + @errDesc;
    EXEC sp_OADestroy @obj;
    RETURN;
END

PRINT '回傳結果: ' + CAST(@ret AS VARCHAR(10));  -- 輸出 300

-- 3. 釋放物件
EXEC sp_OADestroy @obj;

關鍵預存程序對照表

預存程序對應 VB/VBScript用途
sp_OACreateCreateObject建立 COM 實例
sp_OAMethodObject.Method呼叫方法/取得/設定屬性
sp_OAGetPropertyObject.Property取得屬性值
sp_OASetPropertyObject.Property = Value設定屬性值
sp_OAGetErrorInfoErr.Object取得錯誤來源與描述
sp_OADestroySet Object = Nothing釋放物件

注意事項

  • 所有 sp_OA* 呼叫必須檢查回傳碼(@hr),非 0 即失敗。
  • 錯誤不會自動中斷 T-SQL 批次,必須手動 RETURN 或 RAISERROR。
  • 輸出參數務必加 OUT / OUTPUT,否則不會回傳值且不報錯。
  • COM 元件需在 SQL Server 服務帳戶具存取權限的環境下註冊(32 位元 SQL Server 需 32 位元 COM)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved