☞將sql嵌入到高階語言中混合程式設計,程式中會含有兩種不同計算模型的語句
(1)sql語句:描述性的面向集合的語句,負責操縱資料庫
(2)高階語言語句(c語言): 過程性的面向記錄的語句,負責控制邏輯流程
c#中可以使用datatable讀取記錄,進一步逐條讀取記錄
什麼是游標?
游標是系統為使用者開設的資料緩衝區,存放sql語句的執行結果
每個游標區都有乙個名字,使用者可以用sql語句逐一從游標中獲取記錄,並賦給主變數,交由主語言進一步處理
為什麼要使用游標?
(1)sql語言是面向集合的,一條sql語句原則上可以產生或處理多條記錄
(2)主語言是面向記錄的,主變數一次只能存放一條記錄
(3)使用主變數並不能完全滿足sql語句向應用程式輸出資料的要求
所以嵌入式sql引入了游標的概念,用來協調這兩種不同的處理方式
使用游標的步驟
(1)說明游標
declare
游標cursor
for<
sql語
(2)開啟游標
open
游標
(3)推進游標指標並取當前記錄
fetch
next
from mycursor into
@sno
,@sname
while
(@@fetch_status=0
)--遍歷所有的資料
fetch
next
from mycursor into
@sno
,@sname
--取下一條游標資料
fetch [ next | prior | first | last] from cursor_name
next:緊跟當前行返回結果行,並且當前行遞增為返回行,如果fetch next為對游標的第一次提取操作,則返回結果集中的第一行。next為預設的游標提取選項。
prior:返回緊鄰當前行前面的結果行,並且當前行遞減為返回行,如果fetch prior為對游標的第一次提取操作,則沒有行返回並且游標置於第一行之前。
first:返回游標中的第一行並將其作為當前行。
last:返回游標中的最後一行並將其作為當前行。
(4)關閉游標
close
游標
if
(exists
(select
*from sys.objects where name =
'proc_cursor'))
drop
procedure proc_cursor
gocreate
procedure proc_cursor -- 儲存過程
asdeclare
@sno
char(9
)--定義變數
declare
@sname
char(20
)--定義變數
declare mycursor cursor
forselect sno,sname from student --宣告游標
open mycursor --開啟游標
fetch
next
from mycursor into
@sno
,@sname
while
(@@fetch_status=0
)--遍歷所有的資料
begin
print
'游標成功取出一條資料:'
print
@sno
print
@sname
print
'********************'
fetch
next
from mycursor into
@sno
,@sname
--取下一條游標資料
endclose mycursor --關閉游標
deallocate mycursor --刪除游標
go exec proc_cursor
go
執行結果
…其效果等同於查詢語句結果帶入變數(不太會表達)
必須使用游標的sql語句有select、current形式的update和delete語句。
資料庫作業17 SQL練習9 CURSOR
if exists select from sys.objects where name proc cursor drop procedure proc cursor gocreate procedure proc cursor 建立儲存過程 procedure 名為proc cursor as d...
資料庫作業17 SQL練習9 CURSOR
if exists select from sys.objects where name proc cursor drop procedure proc cursor 如果存在,就刪除過程 gocreate procedure proc cursor 儲存過程 asdeclare sno char ...
資料庫作業17 SQL練習9 CURSOR
為何使用游標 使用游標 cursor 的乙個主要的原因就是把集合操作轉換成單個記錄處理方式。用 sql 語言從資料庫中檢索資料後,結果放在記憶體的一塊區域中,且結果往往是乙個含有多個記錄的集合。游標機制允許使用者在 sql server 內逐行地訪問這些記錄,按照使用者自己的意願來顯示和處理這些記錄...