關於sql server動態擷取資料庫下所有表以及遊標的簡單使用

來源:互聯網
上載者:User

標籤:

需求是這樣的,在SQL SERVER中的Stock庫下,有兩千多張表。需要每張表都刪除今天的一條錯誤資料。

首先得要得到所有表的名稱,代碼如下:

Select name FROM SysObjects Where XType=U and name <>InsertHistory order BY Name ;

SysObjects是一張系統資料表,它會記錄在資料庫內建立的每個對象(約束、預設值、日誌、規則、預存程序等)在表中佔一行。只有在 tempdb 內,每個臨時對象才在該表中佔一行。 如果對SysObjects比較敢興趣的話,可轉到我之前發布的文章,SQL Server中的系統資料表sysobjects使用方法,實現迴圈遍曆所有表(轉)

接下來是遊標的使用。

在關聯式資料庫中,我們對於查詢的思考是面向集合的。而遊標打破了這一規則,遊標使得我們思考方式變為逐行進行.對於類C的開發人員來著,這樣的思考方式會更加舒服。

想繼續瞭解遊標的,請轉:http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html

用法請看我在下面的注釋。

 1 declare @tbName varchar(20);--定義遊標每一行的資料臨時變數 2 declare mycursor cursor  --定義一個全域遊標,全域遊標可直接賦值,但結尾必須手動釋放掉。 3 for 4 Select name FROM SysObjects Where XType=U and name <>InsertHistory order BY Name ;--為遊標賦值賦值 5 open mycursor 6  7 fetch next from mycursor into @tbName; --第一行賦值給臨時變數 8 while  9 @@FETCH_STATUS=010 begin11     exec(delete from +@tbName+ where datediff(day,[Time],getdate())=0;);12     fetch next from mycursor into @tbname;        13 end 14 --關閉遊標15 close mycursor16 --釋放遊標17 deallocate mycursor

 

最後想對使用遊標時提一些建議
  •      如果能不用遊標,盡量不要使用遊標
  •      用完用完之後一定要關閉和釋放
  •      盡量不要在大量資料上定義遊標
  •      盡量不要使用遊標上更新資料
  •      盡量不要使用insensitive, static和keyset這些參數定義遊標
  •      如果可以,盡量使用FAST_FORWARD關鍵字定義遊標
  •      如果只對資料進行讀取,當讀取時只用到FETCH NEXT選項,則最好使用FORWARD_ONLY參數

關於sql server動態擷取資料庫下所有表以及遊標的簡單使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.