SQL Server里一些未公開的擴展存儲過程
[轉帖]?博客天地 www.inbaidu.com
SQL Server里一些未公開的擴展存儲過程
擴展存儲過程(xp)是直接運行在SQL Server地址空間里的動態鏈接庫,是通過使用SQL Server開放數據服務API(SQL Server Open Data Services API)開發的。我們可以像執行普通存儲過程一樣,在“查詢分析器”里運行擴展存儲過程。擴展存儲過程被用于SQL Server的擴展功能,我們可以直接利用SQL Server附帶的眾多擴展存儲過程,也可以用C或C++等編程語言編寫我們自己的擴展存儲過程。
在本文中,我將告訴大家一些未公開的有用的擴展存儲過程。這些存儲過程可以運行于SQL Server 7.0,當然SQL Server 2000也可以。
1、sp_MSgetversion
這個擴展存儲過程可以用來獲得Microsoft SQL Server的當前版本。要獲得SQL Server的版本,執行:
EXEC master..sp_MSgetversion
注意,還有一種方法獲得SQL Server的當前版本(這種方法能得到更多信息),那就是用下面的SELECT語句:
SELECT @@version
2、xp_dirtree
這個擴展存儲過程可以用于為在擴展存儲(xp)中命名的文件夾列出所有文件夾。要列出C:\MSSQL7中的所有文件夾,執行:
EXEC master..xp_dirtree 'C:\MSSQL7'
3、xp_enum_oledb_providers
這個擴展存儲過程用于列出所有可用的OLE DB提供者(OLE DB providers)。它返回提供者的名稱、解析名稱(Parse Name)和提供者的描述。要獲得你的SQL Server的所有OLE DB提供者,執行:
EXEC master..xp_enum_oledb_providers
4、xp_enumcodepages
這個擴展存儲過程可以用來列出所有你的SQL Server的代碼頁(code pages)、字符集和它們的描述。要查看這些信息,執行:
EXEC master..xp_enumcodepages
5、xp_enumdsn
這個擴展存儲過程系統所有的DSN和它們的描述。要查看系統DSN,執行:
EXEC master..xp_enumdsn
6、xp_enumerrorlogs
這個擴展存儲過程返回所有錯誤日志的列表和它們的最后更改日期。要獲得錯誤日志列表,執行:
EXEC master..xp_enumerrorlogs
7、xp_enumgroups
這個擴展存儲過程返回Windows NT組及其描述的列表。要獲得Windows NT組的列表,運行:
EXEC master..xp_enumgroups
8、xp_fileexist
我們可以用這個擴展存儲過程來確定一個特定的文件是否在磁盤上存在。用法:
EXECUTE xp_fileexist filename [, file_exists INT OUTPUT]
比如要檢查C:盤是否存在boot.ini文件,執行:
EXEC master..xp_fileexist 'c:\boot.ini'
9、xp_fixeddrives
這是一個非常有用的擴展存儲過程,他返回所有硬盤和它們的空閑空間有多少MB的列表。要查看驅動器列表,執行:
EXEC master..xp_fixeddrives
10、xp_getnetname
這個擴展存儲過程返回你連接的SQL Server的WINS名。查看這個名稱,執行:
EXEC master..xp_getnetname
11、xp_readerrorlog
這個擴展存儲過程返回錯誤日志的內容。我們可以在SQL Server 7.0的默認目錄C:\MSSQL7\Log里找到錯誤日志。要查看錯誤日志的話,執行:
EXEC master..xp_readerrorlog
12、xp_regdeletekey
這個擴展存儲過程將從注冊表里刪除一個主鍵。用這個功能的時候務必小心!用法:
EXECUTE xp_regdeletekey [@rootkey=]'rootkey',
??????????????????????? [@key=]'key'
比如要刪除“HKEY_LOCAL_MACHINE”中的“SOFTWARE\Test”這個主鍵,執行:
EXEC master..xp_regdeletekey @rootkey='HKEY_LOCAL_MACHINE',
???????????????????????????? @key='SOFTWARE\Test'
13、xp_regdeletevalue
這個擴展存儲過程將刪除注冊表里某個特定的鍵值。用這個功能的時候務必小心!用法:
EXECUTE xp_regdeletevalue [@rootkey=]'rootkey',
????????????????????????? [@key=]'key',
????????????????????????? [@value_name=]'value_name'
比如,從“HKEY_LOCAL_MACHINE”中刪除“SOFTWARE\Test”下的“Testvalue”,執行:
EXEC master..xp_regdeletevalue @rootkey='HKEY_LOCAL_MACHINE',
?????????????????????????????? @key='SOFTWARE\Test',
?????????????????????????????? @value_name='Testvalue'
14、xp_regread
這個擴展存儲過程從注冊表里度數據。用法:
EXECUTE xp_regread [@rootkey=]'rootkey',
?????????????????? [@key=]'key'
?????????????????? [, [@value_name=]'value_name']
?????????????????? [, [@value=]@value OUTPUT]
比如要把“HKEY_LOCAL_MACHINE”中“SOFTWARE\Test”下的“Testvalue”讀到變量@test,執行:
DECLARE @test varchar(20)
EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
??????????????????????? @key='SOFTWARE\Test',
??????????????????????? @value_name='Testvalue',
??????????????????????? @value=@test OUTPUT
SELECT @test
15、xp_regwrite
這個擴展存儲過程用來寫注冊表。用法:
EXECUTE xp_regwrite [@rootkey=]'rootkey',
??????????????????? [@key=]'key',
??????????????????? [@value_name=]'value_name',
??????????????????? [@type=]'type',
??????????????????? [@value=]'value'
比如把變量“Test”寫到“HKEY_LOCAL_MACHINE”中“SOFTWARE\Test”下的“Testvalue”,執行:
EXEC master..xp_regwrite
???? @rootkey='HKEY_LOCAL_MACHINE',
???? @key='SOFTWARE\Test',
???? @value_name='Testvalue',
???? @type='REG_SZ',
???? @value='Test'
16、xp_subdirs
這個擴展存儲過程用于為在擴展存儲(xp)中命名的文件夾列出文件夾列表。比之于xp_dirtree,xp_subdirs只返回那些深度為1(depth = 1)的文件夾。這里是例子:
EXEC master..xp_subdirs 'C:\MSSQL7'
注意:記住這些未公開的擴展存儲過程不是Microsoft官方支持的,并且它們可能在下一個版本的SQL Server中無法找到。