1. 程式人生 > 資料庫 >SQL Server遊標的介紹與使用

SQL Server遊標的介紹與使用

遊標概念

資料庫操作中我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?遊標為我們提供了一種極為優秀的解決方案。

遊標(cursor)是系統為使用者開設的一個數據緩衝區,存放SQL語句的執行結果。

每個遊標區都有一個名字。使用者可以用SQL語句逐一從遊標中獲取記錄,並賦給主變數,交由主語言進一步處理.遊標提供了一種對從表中檢索出的資料進行操作的靈活手段,就本質而言,遊標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制。

遊標總是與一條SQL 查詢語句相關聯因為遊標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的遊標位置組成。

當決定對結果集進行處理時,必須宣告一個指向該結果集的遊標。如果曾經用C 語言寫過對檔案進行處理的程式,那麼遊標就像您開啟檔案所得到的檔案控制代碼一樣,只要檔案開啟成功,該檔案控制代碼就可代表該檔案。對於遊標而言,其道理是相同的。可見遊標能夠實現按與傳統程式讀取平面檔案類似的方式處理來自基礎表的結果集,從而把表中資料以平面檔案的形式呈現給程式。

我們知道關係資料庫管理系統實質是面向集合的,在MS SQL SERVER 中並沒有一種描述表中單一記錄的表達形式,除非使用where 子句來限制只有一條記錄被選中。

因此我們必須藉助於遊標來進行面向單條記錄的資料處理。由此可見,遊標允許應用程式對查詢語句select 返回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作;它還提供對基於遊標位置而對錶中資料進行刪除或更新的能力;而且,正是遊標把作為面向集合的資料庫管理系統和麵向行的程式設計兩者聯絡起來,使兩個資料處理方式能夠進行溝通。

遊標的使用一般是這樣,個人理解:定義遊標-->開啟遊標-->Fetch next from into --> where @@fech_status=0(這個類似C語言中的指標) -->Fetch next from into -->end -->關閉遊標(close 遊標名)-->Deallocate 遊標

具體事例:

定義遊標Test_Cursor,

declare @paraA nvarchar(50)--定義引數
declare @paraB nvarchar(50)--定義引數
declare @paraC nvarchar(50)--定義引數
declare Test_Cursor cursor local for--定義遊標

開啟遊標 ,定義要遊標的結果集

--相當於要遍歷的表內容
select
 tableA_columnA,tableA_columnB,tableA_columnC 
from tableA
--相當於將指標指向這個表頭,指向該資料表集的第一條記錄,
open Test_Cursor fetch next from Test_Cursor into
@paraA,@paraB,@paraC
while @@fetch_status=0

迴圈遍歷資料集中的內容,一條條做

begin 
insert into
 tableB(
 tableB_columnA,tableB_columnB,tableB_columnC)
values(
@paraA,@paraC)
fetch next from Test_Cursor into
@paraA,@paraC
end

關閉和收尾回收記憶體

close Test_Cursor
deallocate Test_Cursor

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支援。如果你想了解更多相關內容請檢視下面相關連結