/*** 游標的使用 講了這個多游標的優(yōu)點,現(xiàn)在我們就親自來揭開游標的神秘的面紗。 使用游標的順序: 聲名游標、打開游標、讀取數(shù)據(jù)、關(guān)閉游標、刪除游標。 1.3.1聲明游標 最簡單游標聲明:DECLARE <游標名>CURSOR FOR<SELECT語句>; 其中select語句可以是簡單查詢,也可以是復(fù)雜的接連查詢和嵌套查詢 例子:[已表2 AddSalary為例子] Declare mycursor cursor for select * from AddSalary 這樣我就對表AddSalary申明了一個游標mycursor 【高級備注】 DECLARE <游標名> [INSENSITIVE] [SCROLL] CURSORFOR<SELECT語句> 這里我說一下游標中級應(yīng)用中的[INSENSITIVE]和[SCROLL] INSENSITIVE 表明MS SQL SERVER 會將游標定義所選取出來的數(shù)據(jù)記錄存放在一臨時表內(nèi)(建立在tempdb 數(shù)據(jù)庫下)。對該游標的讀取操作皆由臨時表來應(yīng)答。因此,對基本表的修改并不影響游標提取的數(shù)據(jù),即游標不會隨著基本表內(nèi)容的改變而改變,同時也無法通過游標來更新基本表。如果不使用該保留字,那么對基本表的更新、刪除都會反映到游標中。 另外應(yīng)該指出,當(dāng)遇到以下情況發(fā)生時,游標將自動設(shè)定INSENSITIVE 選項。 a.在SELECT 語句中使用DISTINCT、 GROUP BY、 HAVING UNION 語句; b.使用OUTER JOIN; c.所選取的任意表沒有索引; d.將實數(shù)值當(dāng)作選取的列。 SCROLL 表明所有的提取操作(如FIRST、 LAST、 PRIOR、 NEXT、 RELATIVE、 ABSOLUTE)都可用。如果不使用該保留字,那么只能進行NEXT 提取操作。由此可見,SCROLL 極大地增加了提取數(shù)據(jù)的靈活性,可以隨意讀取結(jié)果集中的任一行數(shù)據(jù)記錄,而不必關(guān)閉再 重開游標。 1.3.2 打開游標 非常簡單,我們就打開剛才我們聲明的游標mycursor OPEN mycursor 1.3.3讀取數(shù)據(jù) FETCH [ NEXT | PRIOR | FIRST | LAST] FROM { 游標名 | @游標變量名 } [ INTO @變量名 [,…] ] 參數(shù)說明: NEXT 取下一行的數(shù)據(jù),并把下一行作為當(dāng)前行(遞增)。由于打開游標后,行指針是指向該游標第1行之前,所以第一次執(zhí)行FETCH NEXT操作將取得游標集中的第1行數(shù)據(jù)。NEXT為默認的游標提取選項。 INTO @變量名[,…] 把提取操作的列數(shù)據(jù)放到局部變量中。列表中的各個變量從左到右與游標結(jié)果集中的相應(yīng)列相關(guān)聯(lián)。各變量的數(shù)據(jù)類型必須與相應(yīng)的結(jié)果列的數(shù)據(jù)類型匹配或是結(jié)果列數(shù)據(jù)類型所支持的隱性轉(zhuǎn)換。變量的數(shù)目必須與游標選擇列表中的列的數(shù)目一致。 現(xiàn)在我們就取出mycursor游標的數(shù)據(jù)吧! 當(dāng)游標被打開時,行指針將指向該游標集第1行之前,如果要讀取游標集中的第1行數(shù)據(jù),必須移動行指針使其指向第1行。就本例而言,可以使用下列操作讀取第1行數(shù)據(jù): Eg: Fetch next from mycursor 或則 Fetch first from mycursor 這樣我就取出了游標里的數(shù)據(jù),但是光光這樣可不夠,我們還需要將取出的數(shù)據(jù)賦給變量 --聲明2個變量 declare @O_ID NVARCHAR(20) declare @A_Salary float --將取出的值傳入剛才聲明的2個變量 Fetch next from mycursor into @ O_ID,@ A_Salary 1.3.4關(guān)閉游標 CLOSE mycursor 1.3.5刪除游標 DEALLOCATE mycursor 1.3.6 實例訓(xùn)練 **/ CREATE PROCEDURE PK_Test AS --聲明2個變量 declare @O_ID nvarchar(20) declare @A_Salary float --聲明一個游標mycursor,select語句中參數(shù)的個數(shù)必須要和從游標取出的變量名相同 declare mycursor cursor for select O_ID,A_Salary from AddSalary --打開游標 open mycursor --從游標里取出數(shù)據(jù)賦值到我們剛才聲明的2個變量中 fetch next from mycursor into @O_ID,@A_Salary --判斷游標的狀態(tài) -- 0 fetch語句成功 ---1 fetch語句失敗或此行不在結(jié)果集中 ---2 被提取的行不存在 while (@@fetch_status=0) begin --顯示出我們每次用游標取出的值 print '游標成功取出一條數(shù)據(jù)' print @O_ID print @A_Salary --用游標去取下一條記錄 fetch next from mycursor into @O_ID,@A_Salary end --關(guān)閉游標 close mycursor --撤銷游標 DEALLOCATE mycursor GO
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article
Grass Wonder Build Guide | Uma Musume Pretty Derby
1 months ago
By Jack chen
Roblox: 99 Nights In The Forest - All Badges And How To Unlock Them
4 weeks ago
By DDD
Uma Musume Pretty Derby Banner Schedule (July 2025)
1 months ago
By Jack chen
RimWorld Odyssey Temperature Guide for Ships and Gravtech
3 weeks ago
By Jack chen
Windows Security is blank or not showing options
1 months ago
By 下次還敢

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)