转:微软未公开的几个过程介绍及用法
一些用在?SQL 2000?的企業(yè)管理?GUI?中,并且不打算用于其他的流程。微軟已預(yù)計將其中的一些存儲過程從未來的?SQL Server?版本中刪除?(?或已經(jīng)刪除了?)?。雖然這些存儲過程可能很有用并為你節(jié)省了很多時間,但是他們可以在任何時候改變他們的函數(shù)或簡單的刪除掉。
下面的圖表顯示了當(dāng)許多存儲過程從一個?Microsoft SQL Server?版本移入另一個版本時,引入了新的存儲過程,而原來的一些則從安裝包里刪除了。大多數(shù)的存儲過程,如果不是所有的,要求用戶是系統(tǒng)管理員服務(wù)器角色以便執(zhí)行這些存儲過程。和文件系統(tǒng)交互的存儲過程還要求執(zhí)行存儲過程的用戶?(?還有?SQL Server?的服務(wù)帳戶?)?具有訪問文件?/?文件夾的權(quán)限。
?
| 存儲過程名稱 | SQL 2000 | SQL 2005 | SQL 2008 |
| sp_executeresultset | X | ? | ? |
| sp_MSforeachdb | X | X | X |
| sp_MSforeachtable | X | X | X |
| sp_readerrorlog | X | X | X |
| xp_create_subdir | ? | X | X |
| Xp_delete_file | ? | X | X |
| xp_dirtree | X | X | X |
| xp_fileexist | X | X | X |
| xp_fixeddrives | X | X | X |
| xp_getfiledetails | X | ? | ? |
| xp_getnetname | X | X | X |
| xp_loginconfig | X | X | X |
| xp_makecab | X | ? | ? |
| xp_msver | X | X | X |
| xp_get_mapi_profiles | X | X | X |
| xp_subdirs | X | X | X |
| xp_test_mapi_profile | X | X | X |
| xp_unpackcab | X | ? | ? |
?sp_executeresultset
微軟在?SQL Server 2005?中刪除了這個名為?sp_executeresultset?的便利小程序。它允許你在空閑時通過使用?SELECT?查詢產(chǎn)生動態(tài)?SQL?代碼。然后,作為結(jié)果的?SQL?命令將會在數(shù)據(jù)庫上執(zhí)行。它允許你創(chuàng)建單獨的一行代碼,這行代碼可以在單步中查詢到你的數(shù)據(jù)庫里的每一個表的記錄數(shù)目?(?就像例子中所顯示的?)?。這是一個未公開的存儲過程,而且無法知道它為什么被刪除了。但是,唉,這個便利的有用存儲過程已經(jīng)沒有了。
exec sp_execresultset 'SELECT ''SELECT '''''' + name + '''''',
?count(*) FROM '' + name
?from sysobjects
?where xtype = ''U'''
?sp_MSforeachdb / sp_MSforeachtable
?
?sp_MSforeachdb / sp_MSforeachtable?
兩個存儲過程,?sp_MSforeachdb?和?sp_MSforeachtable?封裝了一個指針。它們允許你對你的?SQL Server?上的每一個數(shù)據(jù)庫和當(dāng)前數(shù)據(jù)庫中的每一個表分別執(zhí)行?T-SQL?代碼。然而你不能在?SQL2000?和之前的版本中在一個?sp_MSforeachdb?命令中使用?sp_MSforeachtable?命令。在這些存儲過程中使用的指針名稱是一樣的?(hCForEach)?,因此在每一次執(zhí)行?sp_MSforeachtable?時會返回一個錯誤說該指針名稱已經(jīng)在使用。在?SQL Server 2005?中,微軟解決了這一問題。為了執(zhí)行?“?下一個?”?命令,你必須告訴其中的一個存儲過程它將使用一個不同的替換字符而不是默認(rèn)的問號。我改變了數(shù)據(jù)庫命令中的這個替換字符,因為它更為簡單。
打印當(dāng)前數(shù)據(jù)庫中的每一個表的名稱
< p>? ?exec sp_MSforeachtable 'print ''?'''
打印當(dāng)前服務(wù)器的每一個數(shù)據(jù)庫
?exec sp_MSforeachdb 'print ''?'''
打印當(dāng)前數(shù)據(jù)庫的每一個表
?exec sp_MSforeachdb 'use [@] exec sp_MSforeachtable ''print
?''''@.?''''''', '@'
?sp_readerrorlog / xp_readerrorlog
存儲過程?sp_readerrorlog?實際上有兩種形式。每一項的工作內(nèi)容一樣?;?一個是另一個的簡單封裝。封裝的存儲過程是?sp_readerrorlog?,它調(diào)用?xp_readerrorlog?。這兩個都有四個輸入?yún)?shù),但是只有前兩個對我們有用。第一個參數(shù)設(shè)定你希望看到的文件編號。第二個是要查看的日志?(?對于?ERRORLOG?是?1?或空,對?SQL Agent Log?是?2)?。這允許你快速并很容易地查看你的錯誤日志,而不是得查看?SQL Server 2005?和?SQL 2008?所帶來的臃腫的日志閱覽器。
查看當(dāng)前的?SQL ERRORLOG?文件。
?exec sp_readerrorlog
?exec sp_readerrorlog 0, 1
查看之前的?SQL Agent Log?文件。
?exec sp_readerrorlog 1, 2
?xp_create_subdir
在?SQL Server 2005?中引入的?xp_create_subdir?存儲過程是非常輕便的,因為你可以用它在?SQL Server?的硬盤上或從?T-SQL?內(nèi)部的網(wǎng)絡(luò)共享上創(chuàng)建文件夾。
?exec xp_create_subdir 'c:MSSQLData'
?xp_delete_file
使用?SQL Server 2005?中引入的?xp_delete_file?存儲過程從?SQL Server?的硬盤或從?T-SQL?內(nèi)部的網(wǎng)絡(luò)共享上刪除文件。
?xp_dirtree
?xp_dirtree?存儲過程允許你查看文件夾樹狀結(jié)構(gòu)和?/?或一個文件夾下的文件列表。這個存儲過程有幾個參數(shù)用來控制這個存儲過程查詢深度和是返回文件和文件夾還是只返回文件夾。第一個參數(shù)設(shè)定要查看的文件夾。?(?建議?;?不要在?Windows?的系統(tǒng)盤根目錄上執(zhí)行這個存儲過程,因為產(chǎn)生樹和返回數(shù)據(jù)需要一些時間。)?第二個參數(shù)限制了這個存儲過程將會進(jìn)行的遞歸級數(shù)。默認(rèn)是零或所有級別。第三個參數(shù)告訴存儲過程包括文件。默認(rèn)是零或只對文件夾,數(shù)值?1?代表包括結(jié)果集的文件。定義第三個參數(shù)為不為零的數(shù)值將會增加一行到輸出的調(diào)用文件,這個文件是顯示進(jìn)入一個文件夾或文件的一個小文件。
獲得完整目錄樹。
?exec xp_dirtree 'd:mssql'
獲得目錄樹的前兩級。
?exec xp_dirtree 'd:mssql', 2
獲得目錄數(shù)的前三級,包括文件。
?exec xp_dirtree 'd:mssql', 3, 1
?exec xp_dirtree 'd:mssql'
?xp_fileexist
這個?SQL Server?存儲過程,?xp_fileexist?, 是用來決定一個文件是存在于的硬盤上還是在網(wǎng)絡(luò)共享上。它對于從規(guī)則文檔中下載數(shù)據(jù)的存儲過程是非常有用的。它允許你在打算盲目的下載數(shù)據(jù)之前查看文件是 否存在。這個存儲過程有兩個參數(shù)。用第一個參數(shù)來確定你想要的文件或文件夾是否存在。第二個參數(shù)是一個輸出參數(shù),如果它被定義了,會根據(jù)文件存在或不存在 而返回?1?或?0?。
沒有這個參數(shù):
?exec xp_fileexist 'c:importfile.csv'
有這個參數(shù):
?DECLARE @file_exists int
?exec xp_fileexist 'c:importfile.csv', @file_exists OUTPUT
?SELECT @file_exists
?xp_fixeddrives
?xp_fixeddrives?存儲過程是最有用的存儲過程之一。它展示了一個列表所有驅(qū)動器名和每個驅(qū)動器上的空閑空間大小。這個參數(shù)有一個單獨的可選輸入?yún)?shù),它可以按驅(qū)動器類型過濾結(jié)果。設(shè)置為數(shù)值?3?將會返回所有的大量存儲設(shè)備?(CD -ROM?,?DVD?等等?);?設(shè)置為數(shù)值?4?將會返回硬盤驅(qū)動器?;?而當(dāng)設(shè)置為數(shù)值?2?時將會返回可移動的設(shè)備?(USB?插拔驅(qū)動器,閃存驅(qū)動器等等?)?。
返回所有的驅(qū)動器。
?exec xp_fixeddrives
只返回硬盤驅(qū)動器
?exec xp_fixeddrives 2
?xp_getfiledetails
?xp_getfiledetails?是另一個非常有用的存儲過程,在?SQL Server 2000?版本中最后一次可用。這個存儲過程返回關(guān)于指定文件的大小、日期和屬性信息,包括創(chuàng)建、訪問和修改的日期和次數(shù)。
< p>? ?exec xp_getfiledetails 'c:filetoload.csv'
?xp_getnetname
?xp_getnetname?存儲過程返回?Microsoft SQL Server?安裝所在的物理機器的名稱。你可以使機器名稱作為數(shù)據(jù)集返回或作為變量返回。
沒有這個參數(shù)
?exec xp_getnetname
使用這個參數(shù)
?DECLARE @machinename sysname
?exec xp_getnetname @machinename OUTPUT
?select @machinename
?xp_loginconfig
?SQL Server?存儲過程將會告訴你關(guān)于執(zhí)行它的用戶的一些基礎(chǔ)的校驗信息。它告訴你校驗方法(Windows?或?SQL?登錄?)?、服務(wù)器的默認(rèn)域、審計級別,還有一些內(nèi)部分隔符信息。
?exec xp_loginconfig
?xp_makecab
在?SQL Server 2000?中,微軟給了我們直接從?T-SQL?壓縮系統(tǒng)文件的能力,不必再到?DOS?下通過xp_cmdshell?和運行第三方軟件,像?pkzip?或?winzip?來完成。這個命令就是?xp_makecab?。它允許你指定一列你想壓縮的文件還有你想放進(jìn)去的?cab?文件。它甚至允許你選擇默認(rèn)壓縮,?MSZIP?壓縮?(?類似于?.zip文件格式?)?或不壓縮。第一個參數(shù)給出到?cab?文件的路徑,這是你想創(chuàng)建和添加文件的地方。第二個參數(shù)是壓縮級別。如果你想使用詳細(xì)的日志記錄就使用第三個參數(shù)。第四個參數(shù)后跟著你想壓縮的文件的名稱。在我的測試?yán)?#xff0c;我可以在擴(kuò)展存儲過程里傳?45?個要壓縮的文件名稱,這意味著它是一個對你的數(shù)據(jù)壓縮要求來說非常靈活的解決方案。
?exec xp_makecab 'c:test.cab', 'mszip', 1, 'c:test.txt' , 'c:test1.txt'
?xp_msver
存儲過程?xp_msver?在查看系統(tǒng)信息的時候是非常有用的。它返回關(guān)于主機操作系統(tǒng)的大量的信息?——SQL?版本號、語言、?CPU?類型、版權(quán)和商標(biāo)信息、?Microsoft Windows?版本、?CPU?數(shù)和親和性設(shè)置、物理內(nèi)存設(shè)置和你的產(chǎn)品鍵。這個存儲過程有許多輸入?yún)?shù),它們允許你過濾返回的記錄。每一個參數(shù)都是一個sysname?數(shù)據(jù)類型,它接受一條記錄的名稱。如果指定了所有的參數(shù),那么只有指定的行作為參數(shù)返回。
?
沒有指定過濾。
exec xp_msver
只返回Platform和Comments記錄。
exec xp_msver 'Platform', 'Comments'
xp_get_mapi_profiles
xp_get_mapi_profiles存儲過程幫助你配置SQL Mail。執(zhí)行時,它會通過SQL Server 的SQL Mail組件調(diào)用Windows,并且顯示在Outlook中配置的可用的MAPI概要列表,并且它指定哪個概要是默認(rèn)的概要。如果它不顯示任何記錄,那 么或者是Outlook沒有配置正確,或者是配置了Outlook概要但SQL Server沒有運行在一個域帳戶下。為了在SQL Server 2005或SQL Server 2008中使用這個存儲過程,你必須在Surface Area Configuration(外圍應(yīng)用配置器)工具或sp_configure存儲過程中設(shè)置“SQL Mail XPs”選項為可用。
exec xp_get_mapi_profiles
xp_subdirs
xp_subdirs存儲過程顯示通過xp_dirtree可用的信息的子集。xp_subdirs將會顯示給定的文件夾的所有的子文件夾。當(dāng)你在一個表里動態(tài)地構(gòu)建一個目錄樹時它是很便利的,并且你不需要擔(dān)心xp_dirtree存儲過程的其它參數(shù)。
exec xp_subdirs 'd:/mssql'
xp_test_mapi_profiles
xp_test_mapi_profiles存儲過程是另一個未公開的存儲過程,它在你建立SQL Mail時非常有用。它會啟動然后停止一個MAPI會話來確保MAPI配置正確并工作在Microsoft SQL Server之內(nèi)。我應(yīng)該指出,它不校驗MAPI客戶端(Outlook)中的郵件服務(wù)器配置,也不發(fā)送測試信息。
存儲過程接受一個單獨的輸入?yún)?shù)。這個參數(shù)是你要測試的MAPI概要的名稱。就像xp_get_mapi_profiles存儲過程一樣,這個存儲過程 要運行在SQL Server 2005和SQL Server 2008之中,你必須在Surface Area Configuration(外圍應(yīng)用配置器)工具或sp_configure存儲過程中設(shè)置“SQL Mail XPs”選項為可用。
當(dāng)使用SQL Mail存儲過程時,要清楚SQL Mail仍預(yù)計要從Microsoft SQL Server平臺中刪除。這意味著sp_get_mapi_profiles和xp_test_mapi_profiles存儲過程是預(yù)計要刪除的,因為 他們是SQL Mail子系統(tǒng)的一部分。你應(yīng)該在SQL Server 2005中做所有的郵件工作,然后使用Database Mail替代SQL Mail來確保代碼可移植到SQL Server的未來版本中。微軟最初計劃在SQL Server 2008中刪除SQL Mail,但基于其包括在了當(dāng)前的測試版本中,它未來是否存在于SQL Server 2008中還是未知數(shù)。
xp_unpackcab
隨xp_makecab存儲過程而來的xp_unpackcab擴(kuò)展存儲過程,它能做的就像它的名字一樣:從cab文件提取文件。第一個參數(shù)是cab文件,第二個參數(shù)是你想提取到的路徑,第三個參數(shù)是詳細(xì)記錄日志。第四個參數(shù)使你可以指定“提取到”的文件名稱。
exec xp_unpackcab 'c:/test.cab', 'c:/temp/', 1
雖然這并不打算羅列SQL Server中未公開的存儲過程的完整列表,但它確實持著使SQL Server管理員的工作容易些的期望提供了一個對許多未公開的存儲過程的參考。記住,你絕不應(yīng)該指望從一個SQL Server版本到另一個版本時這些存儲過程仍然存在,你也不應(yīng)該期待在不同的版本間它們的代碼基礎(chǔ)仍然相同。意思就是,去編碼并享受它帶來的便利。
所有提供的關(guān)于Microsoft SQL Server 2008(Katmai)的信息是基于該軟件的測試版10.0.1019。
轉(zhuǎn)載于:https://www.cnblogs.com/zerocc/archive/2013/04/09/3010568.html
總結(jié)
以上是生活随笔為你收集整理的转:微软未公开的几个过程介绍及用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 处理js事件时,获取键盘数字注意
- 下一篇: 【IT笔试面试题整理】字符串的排列