T-SQL 功能強大,但某些作業 (如複雜運算、外部系統整合) 在 SQL 內部處理不便。SQL Server 提供 OLE Automation 預存程序,允許在 T-SQL 中建立 COM 物件實例、呼叫方法、取得屬性,擴展資料庫引擎能力。
| 預存程序 | 用途 |
|---|---|
| sp_OACreate | 建立 COM 物件實例 |
| sp_OAMethod | 呼叫物件方法或取得/設定屬性 |
| sp_OAGetErrorInfo | 取得錯誤詳細資訊 |
| sp_OADestroy | 釋放物件實例 |
' 專案名稱: testSQLCOM
' 類別名稱: TestMath
Public Function AddMe(a As Long, b As Long) As Long
AddMe = a + b
End Function
編譯產生 DLL 並註冊至系統。
DECLARE @objToken INT, @retCode INT, @result INT
DECLARE @errMsg VARCHAR(255), @errSrc VARCHAR(255)
-- 建立實例
EXEC @retCode = sp_OACreate 'testSQLCOM.TestMath', @objToken OUT
IF @retCode <> 0
BEGIN
EXEC sp_OAGetErrorInfo @objToken, @errMsg OUT, @errSrc OUT
PRINT '建立實例失敗: ' + @errMsg + ' ' + @errSrc
RETURN
END
-- 呼叫方法
EXEC @retCode = sp_OAMethod @objToken, 'AddMe', @result OUT, 100, 200
IF @retCode <> 0
BEGIN
EXEC sp_OAGetErrorInfo @objToken, @errMsg OUT, @errSrc OUT
PRINT '呼叫方法失敗: ' + @errMsg + ' ' + @errSrc
EXEC sp_OADestroy @objToken
RETURN
END
PRINT '回傳結果: ' + CAST(@result AS VARCHAR(10)) -- 輸出 300
-- 釋放資源
EXEC sp_OADestroy @objToken
透過 sp_OACreate 系列預存程序,T-SQL 可跨越語言界限呼叫 COM 元件,為舊版 SQL Server 提供擴充彈性。但需謹慎評估效能、安全性與維護成本,現代專案建議優先考慮 CLR 整合或外部服務架構。