如何對SQL Server數(shù)據(jù)表和數(shù)據(jù)庫進行迭代操作
本文介紹了master數(shù)據(jù)庫中兩個非常有用但在SQL Server在線教科書中沒有提到的存儲過程。
這些系統(tǒng)過程對于處理以下任務(wù)非常方便,如判斷使用的存儲空間大小、行數(shù)、用戶表索引等等。第一個過程sp_MSForEachDB對于感興趣的服務(wù)器上的每個數(shù)據(jù)庫執(zhí)行三條命令。
◆@command1:第一個執(zhí)行的命令◆@replacechar:用另一個占位賦替換“?◆@command2:第二個執(zhí)行的命令◆@command3:第三個執(zhí)行的命令◆@precommand:進入循環(huán)前執(zhí)行的命令◆@postcommand:循環(huán)結(jié)束后執(zhí)行的命令
每個命令集(即使該集合只含有一條命令)作為一個批處理對每個數(shù)據(jù)庫執(zhí)行,所以當(dāng)我們要將捕獲的結(jié)果輸出到文本而不是標準結(jié)果集表時,這將非常有用。
為了實現(xiàn)這一要求,選擇菜單中的查詢按鈕|輸出結(jié)果|輸出到文本或者按快捷鍵[Ctrl]T。
下面的代碼返回服務(wù)器上每個數(shù)據(jù)庫中用戶數(shù)據(jù)表的數(shù)目:
exec sp_MSForEachDB@command1 = "use ? exec sp_SpaceUsed"
The abbreviated output looks like this:簡短輸出可能如下:
數(shù)據(jù)庫名數(shù)據(jù)庫大小未分配空間大小
--------------------- ------------------ master 5.25 MB1.26 MB
reserved data index_size unused------------------ ------------------ 2808 KB 1144 KB 1080 KB 584 KB
第二個過程sp_MSForEachTable接受7個參數(shù):
◆@command1:第一個執(zhí)行的命令◆@replacechar:用另一個占位符替換“?◆@command2:第二個執(zhí)行的命令◆@command3:第三個執(zhí)行的命令◆@whereand:Where條件語句 (或 Order By 語句) ◆@precommand:進入循環(huán)前執(zhí)行的命令 ◆@postcommand:循環(huán)結(jié)束后執(zhí)行的命令
通過對要傳遞的參數(shù)命名,可以跳過傳遞空值的要求。當(dāng)要執(zhí)行的命令中含有一個問號時,參數(shù)@replacechar十分有用。@whereand參數(shù)的實現(xiàn)可以根據(jù)過濾器縮小輸出的范圍。
你還可以加入一個ORDER BY語句。下面的例子返回AdventureWorks數(shù)據(jù)庫中每個數(shù)據(jù)表的行數(shù),并按照數(shù)據(jù)表明對它們排序:
exec sp_MSForEachTable@command1 = "Print '?'", @command2 = "select count(*) from ?", @whereand = "ORDER BY 1"
下面是一些輸出結(jié)果:
[HumanResources].[Department]-----------16
[HumanResources].[Employee]-----------290
[HumanResources].[EmployeeAddress]-----------290
[HumanResources].[EmployeeDepartmentHistory]-----------296
我喜歡通過模式和表名對數(shù)據(jù)表排序。
相關(guān)文章:
1. SQL Server中, DateTime (日期)型操作2. 使用SQL語句快速獲取SQL Server數(shù)據(jù)字典3. 探討SQL Server 2005.NET CLR編程4. SQL Server 2000企業(yè)版安裝教程5. Microsoft SQL Server 查詢處理器的內(nèi)部機制與結(jié)構(gòu)(1)6. SQL SERVER 2005 EXPRESS不能遠程連接的問題7. 一個SQL Server Sa密碼破解的存儲過程8. SQL server 2000存儲過程9. SQL Server中的數(shù)據(jù)類型詳解10. 在SQL Server數(shù)據(jù)庫中如何減少死鎖發(fā)生
