對SQL數據表和數據庫進行迭代操作
本文介紹了master數據庫中兩個非常有用但在SQL Server在線教科書中沒有提到的存儲過程。
這些系統過程對于處理以下任務非常方便,如判斷使用的存儲空間大小、行數、用戶表索引
等等。第一個過程sp_MSForEachDB對于感興趣的服務器上的每個數據庫執行三條命令。
@command1:第一個執行的命令
@replacechar:用另一個占位賦替換“?”
@command2:第二個執行的命令
@command3:第三個執行的命令
@precommand:進入循環前執行的命令
@postcommand:循環結束后執行的命令
每個命令集(即使該集合只含有一條命令)作為一個批處理對每個數據庫執行,
所以當我們要將捕獲的結果輸出到文本而不是標準結果集表時,這將非常有用。
為了實現這一要求,選擇菜單中的查詢按鈕|輸出結果|輸出到文本或者按快捷鍵[Ctrl]T。
下面的代碼返回服務器上每個數據庫中用戶數據表的數目:
exec sp_MSForEachDB@command1 = "use ? exec sp_SpaceUsed"
The abbreviated output looks like this:簡短輸出可能如下:
數據庫名數據庫大小未分配空間大小
--------------------- ------------------
master 5.25 MB1.26 MB
reserved data index_size unused
------------------ ------------------
2808 KB 1144 KB 1080 KB 584 KB
第二個過程sp_MSForEachTable接受7個參數:
@command1:第一個執行的命令
@replacechar:用另一個占位符替換“?”
@command2:第二個執行的命令
@command3:第三個執行的命令
@whereand:Where條件語句 (或 Order By 語句)
@precommand:進入循環前執行的命令
@postcommand:循環結束后執行的命令
通過對要傳遞的參數命名,可以跳過傳遞空值的要求。當要執行的命令中含有一個問號時,參數@replacechar十分有用。@whereand參數的實現可以根據過濾器縮小輸出的范圍。
你還可以加入一個ORDER BY語句。下面的例子返回AdventureWorks數據庫中每個數據表的行數,并按照數據表明對它們排序:
exec sp_MSForEachTable@command1 = "Print '?'",
@command2 = "select count(*) from ?", @whereand = "ORDER BY 1"
下面是輸出結果:
[HumanResources].[Department]-----------
16[HumanResources].[Employee]-----------290[HumanResources].
[EmployeeAddress]-----------290[HumanResources].
[EmployeeDepartmentHistory]-----------296 本文出自 51CTO.COM技術博客
作者:
RDIF
出處:
http://www.rzrgm.cn/huyong/
Email:
406590790@qq.com
QQ:
406590790
微信:
13005007127(同手機號)
框架官網:
http://www.guosisoft.com/
http://www.rdiframework.net/
框架其他博客:
http://blog.csdn.net/chinahuyong
http://www.rzrgm.cn/huyong
國思RDIF開發框架
,
給用戶和開發者最佳的.Net框架平臺方案,為企業快速構建跨平臺、企業級的應用提供強大支持。
關于作者:系統架構師、信息系統項目管理師、DBA。專注于微軟平臺項目架構、管理和企業解決方案,多年項目開發與管理經驗,曾多次組織并開發多個大型項目,在面向對象、面向服務以及數據庫領域有一定的造詣。現主要從事基于
RDIF
框架的技術開發、咨詢工作,主要服務于金融、醫療衛生、鐵路、電信、物流、物聯網、制造、零售等行業。
如有問題或建議,請多多賜教!
本文版權歸作者和CNBLOGS博客共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,可以通過微信、郵箱、QQ等聯系我,非常感謝。

浙公網安備 33010602011771號