MSSQL之遊標的用法
我們知道所有SQL語句都在行集上執行。SELECT語句返回包含所有滿足SELECT語句限定條件的行的完整結果集。應用程式需要一次處理結果集的一行或一個行塊。遊標是結果集的邏輯擴充套件,它使應用程式得以逐行處理結果集。
SQL SERVER支援多種指定遊標的機制:
1、Transact-SQL支援用於管理遊標的SQL-92 DECLARE CURSOR、OPEN、FETCH 和CLOSE語句。Transact-SQL還支援遊標擴充套件,如:
(1)、允許對重新使用遊標進行優化的DEALLOCATE語句。//刪除遊標
(2)、定義Transact-SQL變數以具有遊標資料型別,然後用它引用遊標。
(3)、定義具有區域性或全域性作用域的遊標。
(4)、在DECLARE CURSOR 語句內指定符合OLE DB和ODBC規範的遊標型別(FORWARD_ONLY、STATIC、KEYSET和 DYNAMIC)。
2、用於SQL Server的Microsoft OLE DB 提供程式支援ADO和OLE DB API的遊標功能。
3、Microsoft SQL Server ODBC驅動程式支援ODBC、RDO、DAO和Microsoft基礎類資料庫類API的遊標功能。
4、用於C語言的Microsoft嵌入式SQL支援嵌入式SQL標準的遊標功能。
5、DB-Library API支援與OLE DB和ODBC API相同級別的遊標功能。
首先,我們建立一個銀行資訊表 IF OBJECT_ID('bankInfo') IS NOT NULL DROP TABLE bankInfo GO --銀行卡資訊表 CREATE TABLE bankInfo ( uId VARCHAR(18) NOT NULL PRIMARY KEY,--卡號 uName VARCHAR(20), --卡主姓名 uMoney MONEY --卡中餘額 ) GO INSERT INTO bankInfo VALUES('9559901','張三',1) INSERT INTO bankInfo VALUES('9559902','李四',1000) INSERT INTO bankInfo VALUES('9559903','王五',800) INSERT INTO bankInfo VALUES('9559904','趙六',50) INSERT INTO bankInfo VALUES('9559905','趙明',5) SELECT * FROM bankInfo,結果顯示如下: /* uId uName uMoney ------------------ -------------------- --------------------- 9559901 張三 1.00 9559902 李四 1000.00 9559903 王五 800.00 9559904 趙六 50.00 9559905 趙明 5.00 (5 行受影響) */
建立了遊標之後,必須要開啟才能使用,還是用T-SQL舉個示例來說明一下游標的使用
來看一個綜合點的遊標應用-----------遊標的使用---------------- DEALLOCATE CursorBank --刪除遊標 GO --------定義遊標----------------- DECLARE CursorBank CURSOR SCROLL FOR SELECT * FROM bankInfo GO OPEN CursorBank --從遊標讀取資料前必須先開啟遊標 FETCH FIRST FROM CursorBank --讀取第一行 /* uId uName uMoney ------------------ -------------------- --------------------- 9559901 張三 401.00 (1 行受影響) */ FETCH NEXT FROM CursorBank --上次讀取行的下一行 /* uId uName uMoney ------------------ -------------------- --------------------- 9559902 李四 600.00 (1 行受影響) */ FETCH PRIOR FROM CursorBank --上次讀取行的上一行 /* uId uName uMoney ------------------ -------------------- --------------------- 9559901 張三 401.00 (1 行受影響) */ FETCH LAST FROM CursorBank --最後一行 /* uId uName uMoney ------------------ -------------------- --------------------- 9559905 趙明 5.00 (1 行受影響) */ FETCH ABSOLUTE 2 FROM CursorBank --定位到第三行 /* uId uName uMoney ------------------ -------------------- --------------------- 9559902 李四 600.00 (1 行受影響) */ FETCH RELATIVE -1 FROM CursorBank --相對位置定位,根據當前遊標位置 /* uId uName uMoney ------------------ -------------------- --------------------- 9559901 張三 401.00 (1 行受影響) */
--通過遊標讀取資料,如果餘額大於等於500,
--則顯示該儲戶為貴賓客戶
--全域性變數@@FETCH_STATUS表示上一個FETCH是否讀取
--到了資料,其返回值型別為int型
-- 值有三種:
-- 0 : FETCH語句成功
-- -1 : FETCH語句失敗或此行不在結果集中
-- -2 : 被提取行不存在
sql語句如下:
DECLARE @id VARCHAR(12),@name VARCHAR(20)
DECLARE @getMoney MONEY
FETCH FIRST FROM CursorBank INTO @id,@name,@getMoney
WHILE @@FETCH_STATUS=0 --上一個fetch是否讀取到了資料
BEGIN
IF(@getMoney>500)
PRINT '你是VIP使用者'+',賬號:'[email protected]+',姓名:'[email protected]+',賬戶餘額:'+CONVERT(VARCHAR(12),@getMoney)
ELSE
PRINT @name+',您不是VIP使用者!'
FETCH NEXT FROM CursorBank INTO @id,@name,@getMoney
END
執行結果如下:
/*
張三,您不是VIP使用者!
你是VIP使用者,賬號:9559902,姓名:李四,賬戶餘額:600.00
你是VIP使用者,賬號:9559903,姓名:王五,賬戶餘額:800.00
趙六,您不是VIP使用者!
趙明,您不是VIP使用者!
*/
以上是關於MSSQL中游標的簡單示例,我只是簡單總結一下,新手可以看看,SQL高手就沒必要了。寫的不對的地方歡迎批評指正。關於遊標的高階用法還是得在專案中慢慢積累和學習。相關推薦
MSSQL之遊標的用法
再來看看MSSQL中的遊標。 我們知道所有SQL語句都在行集上執行。SELECT語句返回包含所有滿足SELECT語句限定條件的行的完整結果集。應用程式需要一次處理結果集的一行或一個行塊。遊標是結果集的邏輯擴充套件,它使應用程式得以逐行處理結果集。 SQL SERVER支援多
sql server之exists用法
nbsp http ima 技術分享 mage .com .cn img bsp sql server之exists用法
linux之sed用法
sil 資料 log sed的用法 單位 welcome 數據 讀取 local sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數據行進行替換、刪除、新增、選取等特定工作,下面先了解一下sed的用法 sed命令行格式為:
Socket之shutdown()用法
超出 線程 出現 shutdown ket 如果 函數 嘗試 通信 通常來說,socket是雙向的,即數據是雙向通信的。但有些時候,你會想在socket上實現單向的socket,即數據往一個方向傳輸。 單向的socket便稱為半開放Socket。要實現半開放式,需要用到sh
【轉載】linux之sed用法
span 變量 常用 tdi 選擇 包括 div 輸入 記得 linux之sed用法 原文地址:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一個很好的文件處理工具,本身是
遊標用法
mem eva from idf function etc acc cti 更新數據 DECLARE @functionIdf int DECLARE @namef varchar(500) DECLARE My_Cursor CURSOR --定義遊標FOR (SELEC
linux之sort用法
asc 成功 部分 需要 字符 linu 是把 內容 div linux之sort用法 sort命令是幫我們依據不同的數據類型進行排序,其語法及常用參數格式: sort [-bcfMnrtk][源文件][-o 輸出文件] 補充說明:sort可針對文本文件的內
Java之HashMap用法
nsvalue 隨機 random pac ring highlight pap span true 源碼: 1 package test_demo; 2 3 import java.util.HashMap; 4 import java.util.Iterat
vue之watch用法
example method cli $watch def pyc 技術 實例 ner 對應一個對象,鍵是觀察表達式,值是對應回調。值也可以是方法名,或者是對象,包含選項。在實例化時為每個鍵調用 $watch() ; //使用官方vue-cli腳手架書寫<te
C#基礎教程之IComparable用法,實現List.sort()排序
排序 跑步 地址 parent reading result object http 第k大的數 List<T>.sort()可以實現對T的排序,比如List<int>.sort()執行後集合會按照int從小到大排序。如果T是一個自定義的Objec
LINUX 之 sed用法
sed用法 Linux sed命令是利用script來處理文本文件 sed可依照script的指令,來處理、編輯文本文件 sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等 語法 sed [-hnV][-e<script>][-
(轉)Linux命令之Ethtool用法詳解
如果 size ram phy 基本設置 速度 終端 網卡驅動 sed Linux命令之Ethtool用法詳解 原文:http://www.linuxidc.com/Linux/2012-01/52669.htm Linux/Unix命令之Ethtool描述:Eth
C#中操作數據庫技術之ExecuteNonQuery用法
pen cte assign == ted for 返回 簡單的 splay 最近在補基礎知識,剛好補到C#中對數據庫操作的一些技術,今天學習了ExecuteNonQuery的東西,看自己項目維護項目的代碼和網上資料查詢,基本上搞懂了ExecuteNonQuery的用法,小
1.12-linux三劍客之awk用法詳解
-a proc == 行號 oss url oldboyedu rap oai 1.12linux三劍客之awk用法詳解內容:1. awk執行過程2. awk命令格式3. awk用法4. awk數組第1章 awk執行過程 一直讀取到文件的最後一行第2章 awk ‘找誰{幹啥
馬哥學習-----李洋個人筆記之--sed用法
sed簡介 基礎命令 Stream EDitor, 行文本編輯器sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,如果讀入的行不符合需求,則不處理直接把內容送往屏幕,符合需求的內容處理
vue之slot用法
highlight port one scrip 用法 har component 技術 src slot元素作為組件模板之中的內容分發插槽。這個元素自身將被替換。 有 name 特性的 slot 稱為具名 slot。 有 slot 特性的內容將分發到名字相匹配的具名 s
linux命令之grep用法介紹
之前 -o 空字符 寫法 文本搜索工具 inter 正則表達 空白字符 符號 Linux系統中grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。grep全稱是Global Regular Expression Print,表示全局正則表
STL之deque用法
ase ssi push clear opera 大小 wap num 入隊 deque:雙端隊列 底層是一個雙向鏈表。 常用的有隊列的尾部入隊、首部出隊。 摘自:http://www.cnblogs.com/liubilan/p/9461141.html dequ
Python鏈接Mssql之Python庫pymssql
example 返回 自動 lua 連接數 dog con fetchone 數據庫 連接數據庫 pymssql連接數據庫的方式和使用sqlite的方式基本相同: 使用connect創建連接對象 connect.cursor創建遊標對象,SQL語句的執行基本都在遊
Java反射之getGenericSuperclass()用法
gets 獲得 target nor com ria 反射 log weight 父類 package com.itheima.mytest;public class Person<T1, T2> {} 子類 package com.itheima.m