對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
相關文章
相關標籤/搜索