程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 在SQL Server存儲過程中執行DTS包

在SQL Server存儲過程中執行DTS包

編輯:關於SqlServer

數據轉換服務(DTS)在數據庫管理和開發的多種領域都有會涉及DTS:

數據倉庫-將數據從原始的處理系統和表格中提取出來以供報表使用
建立OLAP
將大量數據從文本文件或其它非數據庫格式的文件中拷貝到數據庫
生成Microsoft Office文檔報表
使用 Distributed Transaction Coordinator (DTC)實現多數據庫操作
在客戶的桌面程序或網站上,經常需要允許用戶按需執行DTS包。在這種情況下,在部署DTS包時,你應該決定將DTS包安置在何處,以及通過何種手段調用它。

你的選擇
要建立一個按需執行的DTS包,可以有多種選擇。下面就對這些選擇進行逐一說明。

SQL Server job
你可以在SQL Server裡建立一個job,並調用sp_start_job存儲過程。使用sp_start_job的不足之處在於它是一個異步過程。由於它不能返回成功或失敗指示,你必須強制使用sp_help_job系統存儲過程查詢job的結果。除非不關心job調用後的結果,否則異步的job將使桌面程序或Web程序變得很復雜。一個job可以被設置成非管理員(sa)模式,但需要一些額外的步驟。

在客戶端桌面使用DTS DLLs
第二種方法是用戶電腦載入Enterprise Manager或DTS DLLs,在用戶的電腦上調用DTS包。雖然用戶電腦執行DTS包有一定可行性,但也有不足:必須考慮到升級DTS包帶來的分發和安裝問題。

在服務器上使用sp_OA 擴展存儲過程
第三種選擇,也就是本文所介紹的核心內容,就是使用sp_OA系統存儲過程族並有計劃的調用DTS包。這種方案可以有效的避免上兩種方案的弊端。

使用 VBScript調用DTS包
實現一個可以運行DTS包的存儲過程的第一步是,編寫一段VBScript代碼。因為sp_OA存儲過程使用起來有些麻煩,因此在利用sp_OA存儲過程實現目標之前,要用VBScript編寫你希望實現的代碼。一般傾向於使用Visual Basic進行簡單的腳本開發工作。如圖A所示,通過在項目引用窗口中加入DTS包對象庫,就可以在腳本中引用DTS包對象了。

在SQL Server存儲過程中執行DTS包(圖一)

圖A:DTS對象庫
在代碼中使用了LoadFromStorageFile函數。一般說,開發工作應該在一個測試環境進行。了解DTS格式的結構化,對將測試產品變為實際產品時很有幫助。

Sp_OA 實現
寫好了VBScript代碼,就可用sp_OA擴展存儲過程實現代碼。和VBScript類似,sp_OA系統存儲過程允許與對象庫的COM+ API進行交互。

Sp_OACreate和在VB或VBScript中調用的CreateObject函數類似。

Sp_OAGetProperty、sp_OASetProperty以及sp_OAMethod用來連接對象庫中的特性和函數。和VB或 VBScript不同的是,sp_OA存儲過程導致的COM+錯誤不會令SQL語句失敗,因此必須手動檢查每個使用sp_OA的函數是否工作正常。

同時,很多sp_OA存儲過程都會引用參數,因此必須在sp_OA存儲過程中的適當參數後加入OUTPUT語句。如果省略了OUTPUT 語句,T-SQL也不會發出警告信息。因此在運行時狀態,雖然存儲過程運行正常但也不會返回正確值。列表B是一個詳細的實現代碼。

解決方案中包括可以重命名DTS包的表格以及實現的過程。其中sp_AdRunDTSPackageOnServer存儲過程接收一個ID參數。在繼續執行前,程序會從T_AdDTSPackageSetup表中,查找到達DTS包的SQL Server路徑。

安全性
詳細的安全性問題不在本文的討論范圍,這裡要說的是一些必須考慮到的基本問題:

在主數據庫的sp_OA擴展系統存儲過程中,實現sp_AdRunDTSPackageOnServer存儲過程需要EXECUTE權限。為了防止一些惡意用戶通過sp_OA過程實現某種目的,可以針對應用程序修改SQL Server規則,以加強安全性。

T-SQL的CURRENT_USER函數對系統安全會有稍許幫助。使用CURRENT_USER和T_AdDTSPackageSetup表格中的區域,可以查詢某個用戶是否被設為:使用給定的DTS包。

DTS包在SQL Server上執行時,會受到SQL Server Agent服務的帳戶設置影響,如果從文件系統中讀取ASCII文件,應該確定SQL Server Agent的帳戶設置對該文件有通過許可。
擴展范例
可以使用sp_OA系統存儲過程與其


您正在看的SQLserver教程是:在SQL Server存儲過程中執行DTS包。他COM+庫進行交互。同時在其他使用ODBC和ActiveX數據對象(ADO)的非SQL Server系統上,sp_OA也可以有效的調用存儲過程。一個僅10行左右的VBScript腳本根本沒有實用價值,而最後合成的T-SQL代碼會變得非常冗長。網上的SQL Server 2000 Books 包括詳細的COM+對象庫的支持說明,並包含了sp_OA系統存儲過程的相關文檔。當用戶再需要按需運行DTS包時,不妨考慮使用sp_OA系統存儲過程來實現。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved