程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 迭代法操作 SQL Server 數據表和數據庫

迭代法操作 SQL Server 數據表和數據庫

編輯:關於SqlServer


  這篇文章裡介紹了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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved