1. 程式人生 > >SQL遊標使用及例項

SQL遊標使用及例項

declare my_cursor cursor scroll dynamic
/*scroll表示可隨意移動遊標指標(否則只能向前),dynamic表示可以讀寫遊標(否則遊標只讀)*/
for
select * from t_msg

open my_cursor
declare @name sysname
fetch next from my_cursor into @name
while(@@fetch_status=0)
begin
print 'UserName: ' + @name
--fetch next from my_cursor
fetch next from my_cursor into @name
end

--fetch first from my_cursor into @name
print @name
/* update 個人資料 set 姓名='zzg' where current of my_cursor */
/* delete from 個人資料 where current of my_cursor */
close my_cursor
deallocate my_cursor

使用遊標(cursor)的一個主要的原因就是把集合操作轉換成單個記錄處理方式。用SQL語言從資料庫中檢索資料後,結果放在記憶體的一塊區域中,且結果往往是一個含有多個記錄的集合。遊標機制允許使用者在SQL server內逐行地訪問這些記錄,按照使用者自己的意願來顯示和處理這些記錄。
2. 如何使用遊標:
     一般地,使用遊標都遵循下列的常規步驟:
      (1) 宣告遊標。把遊標與T-SQL語句的結果集聯絡起來。
      (2) 開啟遊標。
      (3) 使用遊標操作資料。
      (4) 關閉遊標。
2.1. 宣告遊標
DECLARE CURSOR語句SQL-92標準語法格式:
DECLARE 遊標名 [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR sql-statement
Eg:
Declare MycrsrVar Cursor
FOR Select * FROM tbMyData
2.2 開啟遊標
OPEN MycrsrVar
當遊標被開啟時,行指標將指向該遊標集第1行之前,如果要讀取遊標集中的第1行資料,必須移動行指標使其指向第1行。就本例而言,可以使用下列操作讀取第1行資料:
     FETCH FIRST from E1cursor
     或 FETCH NEXT from E1cursor
2.3      使用遊標操作資料   
下面的示例用@@FETCH_STATUS控制在一個WHILE迴圈中的遊標活動
/* 使用遊標讀取資料的操作如下。*/
DECLARE E1cursor cursor      /* 宣告遊標,預設為FORWARD_ONLY遊標 */
FOR SELECT * FROM c_example
OPEN E1cursor                /* 開啟遊標 */
FETCH NEXT from E1cursor     /* 讀取第1行資料*/
WHILE @@FETCH_STATUS = 0     /* 用WHILE迴圈控制遊標活動 */
BEGIN
FETCH NEXT from E1cursor   /* 在迴圈體內將讀取其餘行資料 */
END

CLOSE E1cursor               /* 關閉遊標 */
DEALLOCATE E1cursor          /* 刪除遊標 */

2.4     關閉遊標
     使用CLOSE語句關閉遊標
CLOSE { { [ GLOBAL ] 遊標名 } | 遊標變數名 }
使用DEALLOCATE語句刪除遊標,其語法格式如下:
DEALLOCATE { { [ GLOBAL ] 遊標名 } | @遊標變數名
3. FETCH操作的簡明語法如下:
FETCH
           [ NEXT | PRIOR | FIRST | LAST]
FROM
{ 遊標名 | @遊標變數名 } [ INTO @變數名 [,…] ]

引數說明:

NEXT   取下一行的資料,並把下一行作為當前行(遞增)。由於開啟遊標後,行指標是指向該遊標第1行之前,所以第一次執行FETCH NEXT操作將取得遊標集中的第1行資料。NEXT為預設的遊標提取選項。

INTO @變數名[,…] 把提取操作的列資料放到區域性變數中。列表中的各個變數從左到右與遊標結果集中的相應列相關聯。各變數的資料型別必須與相應的結果列的資料型別匹配或是結果列資料型別所支援的隱性轉換。變數的數目必須與遊標選擇列表中的列的數目一致。

--------------------------------------------------------------------------------------------------------------------------------

每執行一個FETCH操作之後,通常都要檢視一下全域性變數@@FETCH_STATUS中的狀態值,以此判斷FETCH操作是否成功。該變數有三種狀態值:

? 0 表示成功執行FETCH語句。

? -1 表示FETCH語句失敗,例如移動行指標使其超出了結果集。

? -2 表示被提取的行不存在。

由於@@FETCH_STATU是全域性變數,在一個連線上的所有遊標都可能影響該變數的值。因此,在執行一條FETCH語句後,必須在對另一遊標執行另一FETCH 語句之前測試該變數的值才能作出正確的判斷。

更新資料;
declare my_youbiao cursor
for select * from t_msg
for update

open my_youbiao
fetch next from my_youbiao
while @@fetch_status=0
begin
--update t_msg set msg='1234567890' where current of my_youbiao
update my_youbiao set msg='123' where current of my_youbiao
fetch next from my_youbiao
print 'asdfasd11'
end
close my_youbiao
deallocate my_youbiao
print 'asdfasd'

 測試通過:


--select * from   master..sysprocesses
use test
declare my_cursor cursor scroll dynamic --scroll表示可以向前或向後移動   dynamic:表示可寫也可讀,
for
select F3 fromtemp--定義my_cursor 遊標

open my_cursor --開啟遊標
declare@namenvarchar(128--定義一個變數
fetchnextfrom my_cursor into@name--遊標停在第一條記錄前面,第一次執行,測試有沒有記錄存在
while(@@fetch_status=0--取資料,直到-2即沒有記錄
begin
print'姓名: '+@name 
--fetch next from my_cursor
fetchnextfrom my_cursor into@name
end

--fetch first from my_cursor into @name
print@name
 
--update temp set F9='zzg' where current of my_cursor 
/* delete from 個人資料 where current of my_cursor */
close my_cursor
deallocate my_cursor

相關推薦

sqlserver儲存過程/遊標例項

--系統儲存過程exec sp_databases --檢視系統資料庫exec sp_tables --檢視系統表exec sp_rename 'aaa','bbb' --修改表明aaa為bbbexec sp_rename 'dbo.aaa','col1','col2' --修改表aaa的列col1為col2

SQL : 遊標使用例項

使用遊標大體需要經過以下幾個步驟:1.定義遊標:declare cursor2.開啟遊標:open cursor3.取得遊標中單個的記錄,並將記錄中的欄位賦值給變數。fetch cursor   (每取一個值,遊標會自動前移)4.迴圈讀取遊標,並對每一個記錄進行處理。fetc

SQL遊標使用例項

declare my_cursor cursor scroll dynamic /*scroll表示可隨意移動遊標指標(否則只能向前),dynamic表示可以讀寫遊標(否則遊標只讀)*/forselect * from t_msg open my_cursordeclare

SQL 中函式 REPLACE() 的用法例項

一、定義:   官方語法: REPLACE ( string_expression , string_pattern , string_replacement )   引數含義: string_expression 要搜尋的字串表示式。string_expression 可以

PL/SQL遊標之顯示遊標操作例項講解

顯式遊標顯式遊標是程式設計師定義遊標獲得更多的控制權的上下文的區域。顯式遊標應在PL/SQL塊的宣告部分中定義。這是建立一個SELECT語句返回多行。建立顯式遊標語法是:CURSOR cursor_na

PL/SQL遊標---隱式遊標操作例項

遊標是指向這一上下文的區域。 PL/SQL通過控制游標在上下文區域。遊標持有的行(一個或多個)由SQL語句返回。行集合游標保持的被稱為活動集合。可以命名一個游標,它可以在程式中獲取和處理SQL語句,一次返回的行引用。有兩種型別的遊標:隱式遊標顯式遊標隱式遊標Oracle在一個

SQL SERVER case的用法例項

1.  官方釋義 計算條件表示式,並返回多個可能的結果表示式之一。    CASE 簡單表示式,它通過將表示式與一組簡單的表示式進行比較來確定結果。    CASE 搜尋表示式,它通過計算一組布林表示式來確定結果。 這兩種格式都支援可選的 ELSE 引數。 CASE

SQL語句大全例項

原文連結:http://www.cr173.com/html/29311_1.html 經典SQL語句大全 一、基礎 1、說明:建立資料庫 CREATE DATABASE database-name  2、說明:刪除資料庫 drop database dbnam

SQL Server 2008 遊標使用例項

本文使用以下兩張資料庫表作為演示物件。 1 遊標初探--使用遊標進行遍歷 declare @classAndStudent table( class_id int,

SQL遊標的簡單例項

下面是一個遊標的例項,方便初學者學習,也可以防止自己忘記 。 DECLARE H_SETTLE CURSOR SCROLL FOR SELECT * FROM TABELNAME      --宣告一個可迴圈操作的遊標 OPEN H_SETTLE      --開啟遊標

SQL Server 遊標使用例項

DECLARE @id varchar(50) DECLARE @value varchar(2000) DECLARE My_Cursor CURSOR --定義遊標 FOR (SELECT id,value FROM table1 where id > 100

MS-SQL遊標的使用理解

與windows或DOS的“游標”不同,MS-SQL的遊標是一種臨時的資料庫物件,既對可用來旋轉儲存在系統永久表中的資料行的副本,也可以指向儲存在系統永久表中的資料行的指標。 遊標為您提供了在逐行的基礎上而不是一次處理整個結果集為基礎的操作表中資料的方法。 1.如何使用遊標

sql中關於T-sql遊標的使用(附有例項

select *from Student order by SName for read only open s_sur select @@CURSOR_ROWS fetch next from s_sur update Student set SAge ='50' where current of s_su

SQL四種語言:DDL DML DCL TCL 例項

作者:泥瓦匠 原文連結:傳送門 1. DDL – Data Definition Language 資料庫定義語言:定義資料庫的結構。 其主要命令有CREATE,ALTER,DROP等,下面用例子詳解。該語言不需要commit,因此慎重。 CREA

SQL中SUBSTRING函式的用法例項解析

一、定義:SQL 中的 substring 函式是用來擷取字串中的一部分字元。這個函式的名稱在不同的資料庫中不完全一樣。 MySQL: SUBSTR( ), SUBSTRING( ) Oracle: SUBSTR( ) SQL Server: SUB

sql遊標

gin fse end gist and eve update 行數 tco 記錄下遊標的使用,也可以在遊標中嵌入循環,即雙重循環,代碼如下 declare @GName varchar(50),@GcName varchar(50)--臨時變量,用來保存遊標

PL/SQL 遊標的使用詳解

四個步驟 語法 list %type 查詢 dbms 打開 def default 一:通過遊標,PL/SQL 指向語句被分析以後的活動集 二:對於不同的SQL語句,遊標的使用情況不同:1:非查詢語句--隱式的2:結果是單行的查詢語句--隱式的或顯式的3:結果是多行的查詢語

登錄Sql Server參數

.text 使用 object類 整合 登錄 div span 轉換 變量 用戶登錄: 如圖,建立一個登錄窗體 連接SQLServer; 利用SqlCommand類的構造方法創建SqlCommand對象用於執行具體的SQL語句,如修改、更新、刪除等。步驟如下: 1、創建S

Dapper擴展SQL跟蹤全局緩存通知

images and names 執行時間 參數 ndt ted 提示 trac 具體原因就不說了,目前項目的構成有兩部分,一部分是是基於框架開發的,另一部是由於早期業務是采用自定義開發模式,雖然數據訪問層都是基於Dapper, 但要做全局sql跟蹤及緩存通知,調整代碼還是

PL/SQL 遊標 (實驗七)

輸出 姓名 blog lec -m %rowtype .com 技術分享 begin PL/SQL 遊標 emp、dept 目標表結構及數據 要求 基於部門表建立遊標dept_cursor1,使用記錄變量接收遊標數據,輸出部門表信息; 顯示格式: 部 門 號: XXX