對SQL Server資料表和資料庫進行迭代操作

2021-04-17 04:53:10 字數 1713 閱讀 4645

本文介紹了master資料庫中兩個非常有用但在sql

這些系統過程對於處理以下任務非常方便,如判斷使用的儲存空間大小、行數、使用者表索引等等。第乙個過程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我喜歡通過模式和表名對資料表排序。

臨時表空間和資料表空間

oracle臨時表空間主要用來做查詢和存放一些緩衝區資料。臨時表空間消耗的主要原因是需要對查詢的中間結果進行排序。重啟資料庫可以釋放臨時表空間,如果不能重啟例項,而一直保持問題sql語句的執行,temp表空間會一直增長。直到耗盡硬碟空間。網上有人猜測在磁碟空間的分配上,oracle使用的是貪心演算法...

sql server 匯入Excel資料表

乙個挺簡單的功能,竟然弄了一下午,現在來總結一下吧。其實最開始的問題是sql server 安裝的不完整,後面的問題是目標資料來源型別不正確。開始時用的是sql server 2005,安裝時有好多功能沒有選,但後來給忘了,一直提示沒有ssis 沒有安裝,就開始在網上查這是個什麼東西,後來知道了是s...

對SQL資料表和資料庫進行迭代操作

這些系統 過程對於處理以下任務非常方便,如判斷使用的儲存空間大小 行數 使用者表索引 等等。第乙個過程sp msforeachdb對於感興趣的伺服器上的每個資料庫執行三條命令。command1 第乙個執行的命令 replacechar 用另乙個佔位賦替換 command2 第二個執行的命令 comm...