使用ASE已經有很長時間了,在使用過程中,不斷深入的了解了它的各種功能,但是對於擴展存儲過程基本上沒有書籍中有講到過,論壇上似乎也沒有出現過此類問題,但是它確實能夠解決部分特殊問題,而且功能是十分強大的,我專門對此進行了研究,現將結果與大家共享.
有時候大家可能會有這種需求,就是需要對服務器進行某些操作,比如拷貝文件,啟動或者停止某些服務和程序等.一般這種情況下,PB就無能為力了,只有輔助於眾多的API函數,並且往往要通過服務器操作系統復雜的權限控制,然後還要執行某些操作,這不是一般PB開發者能夠從容做到的.擴展存儲過程為我們提供了一個便利的方法.
1.常見的擴展存儲過程:
xp_cmdshell:以命令行的方式在服務器端執行某些操作.命令行的功能是非常強大的,幾乎上可以做任何事情.
2.mail系列的擴展存儲過程.
3.自定義的存儲過程,為了實現某些特殊的功能.
下面我們主要以xp_cmdshell來說明如何使用擴展存儲過程:
首先擴展存儲過程其調用方式和普通過程的調用方式是一樣的;
同樣,必須有權限才能調用擴展過程;
對於xp_cmdshell還有個特殊的地方:它執行了更加嚴格的權限控制,即使有sa權限,缺省情況下也不能被執行,必須使用sp_configure 修改服務器配置"xp_cmdshell context" 為0,重新啟動服務器,才有了自個權限.
下面我們開始通過xp_cmdshell,獲取服務器的時間,很簡單:
打開pb的數據庫畫板,用sa用戶連接上數據庫,輸入:
exec xp_cmdshell 'date';
系統將返回服務器時間.
然後我們執行一個拷貝,將c:盤的文件test.txt拷貝到d:盤:
exec xp_cmdshell "copy c:\test.txt d:\test.txt";