SQL Server 提供一系列擴展預存程序,讓開發人員能直接從 T-SQL 執行作業系統層級的操作,如檔案系統存取、網路資訊查詢、錯誤日誌閱讀等。本文整理常用擴展預存程序並提供實際呼叫範例,供開發與管理參考。
EXEC master..sp_msgetversion;
xp_dirtree 可遞迴列出目錄結構,參數依序為:目錄路徑、遞迴深度、是否顯示檔案。
-- 僅列出 C 槽根目錄第一層子目錄
EXEC master..xp_dirtree 'C:', 1;
-- 列出第一層並包含檔案
EXEC master..xp_dirtree 'C:', 1, 1;
xp_fileexist 回傳旗標指出檔案是否存在。
DECLARE @flag INT;
EXEC master..xp_fileexist 'C:\abc.bak', @flag OUTPUT;
IF @flag = 1
PRINT '檔案存在';
ELSE
PRINT '檔案不存在';
EXEC master..xp_fixeddrives;
回傳每個固定磁碟機的磁碟代號與可用空間 (MB)。
EXEC master..xp_availablemedia;
回傳裝置名稱、可用位元組 (low/high)、媒體類型 (1=軟碟, 2=硬碟, 8=CD-ROM)。
EXEC master..xp_subdirs 'C:\WINNT';
EXEC master..xp_enum_oledb_providers;
EXEC master..xp_enumcodepages;
EXEC master..xp_enumdsn;
EXEC master..xp_enumerrorlogs;
EXEC master..xp_enumgroups;
EXEC master..xp_getnetname;
EXEC master..xp_readerrorlog;
在 master.dbo.sp_addlogin 內部使用了加密函數 pwdencrypt,有興趣的開發者可自行研究其運作機制(注意:此為內部非公開函數,生產環境不建議直接呼叫)。
擴展預存程序運行於 SQL Server 進程空間內,權限極高。生產環境應嚴格控制 EXECUTE 權限,僅授予必要帳號,並定期稽核使用情形,防止資安風險。