如何對(duì)SQL Server數(shù)據(jù)表和數(shù)據(jù)庫(kù)進(jìn)行迭代操作
本文介紹了master數(shù)據(jù)庫(kù)中兩個(gè)非常有用但在SQL Server在線教科書中沒有提到的存儲(chǔ)過程。
這些系統(tǒng)過程對(duì)于處理以下任務(wù)非常方便,如判斷使用的存儲(chǔ)空間大小、行數(shù)、用戶表索引等等。第一個(gè)過程sp_MSForEachDB對(duì)于感興趣的服務(wù)器上的每個(gè)數(shù)據(jù)庫(kù)執(zhí)行三條命令。
◆@command1:第一個(gè)執(zhí)行的命令◆@replacechar:用另一個(gè)占位賦替換“?◆@command2:第二個(gè)執(zhí)行的命令◆@command3:第三個(gè)執(zhí)行的命令◆@precommand:進(jìn)入循環(huán)前執(zhí)行的命令◆@postcommand:循環(huán)結(jié)束后執(zhí)行的命令
每個(gè)命令集(即使該集合只含有一條命令)作為一個(gè)批處理對(duì)每個(gè)數(shù)據(jù)庫(kù)執(zhí)行,所以當(dāng)我們要將捕獲的結(jié)果輸出到文本而不是標(biāo)準(zhǔn)結(jié)果集表時(shí),這將非常有用。
為了實(shí)現(xiàn)這一要求,選擇菜單中的查詢按鈕|輸出結(jié)果|輸出到文本或者按快捷鍵[Ctrl]T。
下面的代碼返回服務(wù)器上每個(gè)數(shù)據(jù)庫(kù)中用戶數(shù)據(jù)表的數(shù)目:
exec sp_MSForEachDB@command1 = "use ? exec sp_SpaceUsed"
The abbreviated output looks like this:簡(jiǎn)短輸出可能如下:
數(shù)據(jù)庫(kù)名數(shù)據(jù)庫(kù)大小未分配空間大小
--------------------- ------------------ master 5.25 MB1.26 MB
reserved data index_size unused------------------ ------------------ 2808 KB 1144 KB 1080 KB 584 KB
第二個(gè)過程sp_MSForEachTable接受7個(gè)參數(shù):
◆@command1:第一個(gè)執(zhí)行的命令◆@replacechar:用另一個(gè)占位符替換“?◆@command2:第二個(gè)執(zhí)行的命令◆@command3:第三個(gè)執(zhí)行的命令◆@whereand:Where條件語句 (或 Order By 語句) ◆@precommand:進(jìn)入循環(huán)前執(zhí)行的命令 ◆@postcommand:循環(huán)結(jié)束后執(zhí)行的命令
通過對(duì)要傳遞的參數(shù)命名,可以跳過傳遞空值的要求。當(dāng)要執(zhí)行的命令中含有一個(gè)問號(hào)時(shí),參數(shù)@replacechar十分有用。@whereand參數(shù)的實(shí)現(xiàn)可以根據(jù)過濾器縮小輸出的范圍。
你還可以加入一個(gè)ORDER BY語句。下面的例子返回AdventureWorks數(shù)據(jù)庫(kù)中每個(gè)數(shù)據(jù)表的行數(shù),并按照數(shù)據(jù)表明對(duì)它們排序:
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
我喜歡通過模式和表名對(duì)數(shù)據(jù)表排序。
相關(guān)文章:
1. sql server添加唯一性約束的方法步驟2. SQL Server的鏈接服務(wù)器技術(shù)小結(jié)3. SQL SERVER 2000系統(tǒng)支持的跟蹤函數(shù)4. 解決MySQL啟動(dòng)報(bào)錯(cuò):ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)5. 如何修改SQL Server 2000身份驗(yàn)證模式和系統(tǒng)管理員6. sql server建立外鍵的操作方法7. 如何將SQL Server表駐留內(nèi)存和檢測(cè)8. MS SQL SERVER 圖像或大文本的輸入輸出9. SQL Server數(shù)據(jù)對(duì)象結(jié)構(gòu)的動(dòng)態(tài)建立與訪問10. SQL Server 2005 CE基礎(chǔ)概要
