SQL Server 游標使用

2021-06-20 12:24:16 字數 1926 閱讀 4226

游標概念

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

游標(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,

@parab,

@parac)

fetch next from test_cursor into

@paraa,

@parab,

@parac

end

關閉和收尾**記憶體

close test_cursor

deallocate test_cursor

sqlserver游標使用

create procedure pk test as 宣告2個變數 declare o id nvarchar 20 declare a salary float 宣告乙個游標mycursor,select語句中引數的個數必須要和從游標取出的變數名相同 declare mycursor curso...

sqlserver游標使用

什麼是游標 結果集,結果集就是select查詢之後返回的所有行資料的集合。游標則是處理結果集的一種機制吧,它可以定位到結果集中的某一行,多資料進行讀寫,也可以移動游標定位到你所需要的行中進行運算元據。一般複雜的儲存過程,都會有游標的出現,他的用處主要有 定位到結果集中的某一行。對當前位置的資料進行讀...

SQL Server 游標使用

1.宣告游標 declare 游標名 cursor select語句 注 此處一定是select語句 2.開啟游標 open 游標名 3.讀取游標資料 fetch next prior first last absolute n relative n from 游標名 into name1,name...