SQLServer中游標是如何處理數據的?

来源:http://www.cnblogs.com/aspnetjia/archive/2016/03/01/5230223.html
-Advertisement-
Play Games

游標(Cursor)是處理數據的一種方法,為了查看或者處理結果集中的數據,游標提供了在結果集中一次以行或者多行前進或向後瀏覽數據的能力。我們可以把游標當作一個指針,它可以指定結果中的任何位置,然後允許用戶對指定位置的數據進行處理。 1.游標的組成 游標包含兩個部分:一個是游標結果集、一個是游標位置。


游標(Cursor)是處理數據的一種方法,為了查看或者處理結果集中的數據,游標提供了在結果集中一次以行或者多行前進或向後瀏覽數據的能力。我們可以把游標當作一個指針,它可以指定結果中的任何位置,然後允許用戶對指定位置的數據進行處理。

1.游標的組成

游標包含兩個部分:一個是游標結果集、一個是游標位置。

游標結果集:定義該游標得SELECT語句返回的行的集合。游標位置:指向這個結果集某一行的當前指針。

2.游標的分類

游標共有3類:

  1. API伺服器游標
  2. Transaction-SQL游標
  3. API客戶端游標。

其中前兩種游標都是運行在伺服器上的,所以又叫做伺服器游標。

API伺服器游標

API伺服器游標主要應用在服務上,當客戶端的應用程式調用API游標函數時,伺服器會對API函數進行處理。使用API函數和方法可以實現如下功能:

  1. 打開一個連接。
  2. 設置定義游標特征的特性或屬性,API自動將游標影射到每個結果集。
  3. 執行一個或多個Transaction-SQL語句。
  4. 使用API函數或方法提取結果集中的行。

API伺服器游標包含以下四種:靜態游標、動態游標、只進游標、鍵集驅動游標(Primary key)

  • 靜態游標的完整結果集將打開游標時建立的結果集存儲在臨時表中,(靜態游標始終是只讀的)。靜態游標具有以下特點:總是按照打開游標時的原樣顯示結果集;不反映資料庫中作的任何修改,也不反映對結果集行的列值所作的更改;不顯示打開游標後在資料庫中新插入的行;組成結果集的行被其他用戶更新,新的數據值不會顯示在靜態游標中;但是靜態游標會顯示打開游標以後從資料庫中刪除的行。
  • 動態游標與靜態游標相反,當滾動游標時動態游標反映結果集中的所有更改。結果集中的行數據值、順序和成員每次提取時都會改變。
  • 只進游標不支持滾動,它只支持游標從頭到尾順序提取數據行。註意:只進游標也反映對結果集所做的所有更改。
  • 鍵集驅動游標同時具有靜態游標和動態游標的特點。當打開游標時,該游標中的成員以及行的順序是固定的,鍵集在游標打開時也會存儲到臨時工作表中,對非鍵集列的數據值的更改在用戶游標滾動的時候可以看見,在游標打開以後對資料庫中插入的行是不可見的,除非關閉重新打開游標。

Transaction-SQL游標

該游標是基於Declare Cursor 語法,主要用於Transaction-SQL腳本、存儲過程以及觸發器中。Transaction-SQL游標在伺服器處理由客戶端發送到伺服器的Transaction-SQL語句。

在存儲過程或觸發器中使用Transaction-SQL游標的過程為:

  1. 聲明Transaction-SQL變數包含游標返回的數據。為每個結果集列聲明一個變數。聲明足夠大的變數來保存列返回的值,並聲明變數的類型為可從數據類型隱式轉換得到的數據類型。
  2. 使用Declare Cursor語句將Transaction-SQL游標與Select語句相關聯。還可以利用Declare Cursor定義游標的只讀、只進等特性。 
  3. 使用Open語句執行Select語句填充游標。
  4. 使用Fetch Into語句提取單個行,並將每列中得數據移至指定的變數中。註意:其他Transaction-SQL語句可以引用那些變數來訪問提取的數據值。Transaction-SQL游標不支持提取行塊。
  5. 使用Close語句結束游標的使用。註意:關閉游標以後,該游標還是存在,可以使用Open命令打開繼續使用,只有調用Deallocate語句才會完全釋放。

客戶端游標

該游標將使用預設結果集把整個結果集高速緩存在客戶端上,所有的游標操作都在客戶端的高速緩存中進行。註意:客戶端游標只支持只進和靜態游標。不支持其他游標。

轉載自:http://www.aspnetjia.com


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 高仿人人網客戶端,有興趣的盆友可以研究下,裡面主要包含的一些UI設計與交互。(註:項目中有少許問題,apk能運行,希望開發者可以參考代碼研究一下。) 源碼下載:http://code.662p.com/list/11_1.html <ignore_js_op> [/td][td] [/td][td]
  • 這個叫指讀的App設計簡約,走MD風格,UI設計很清新,我個人挺喜歡。 這次上傳的源碼是在Eclipse環境開發的,儘管放心啦上次找源碼的時候不知道來源,也不知道原作者,很抱歉。這個設計精美的app是來自洋蔥先森大神的。大家可以向他學習 源碼下載:http://code.662p.com/list/
  • 一,效果圖。 二,工程圖。 三,代碼。 RootViewController.h #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @interface RootViewController : UIViewControlle
  • 這個世界上有兩種人-從經驗教訓中學習的人以及聽從別人建議的人。這裡是我一路走來學到的一些東西,分享給大家: 在添加任何第三方party之前,請三思:這真的是一個成熟的項目嗎? 如果一個東西用戶看不到,就不要繪製它! 除非真的需要,否則別使用資料庫; 達到65k方法數限制來的非常快,真的,非常快!不過
  • 最近碰到一個問題,需求如下: 需求:在某個storyboard中有一個單獨的控制器VC(沒有連線),在storyboard中給此VC隨便拖幾個控制項在上面,同時自定義一個類綁定此VC,問如何獲取到此VC並且顯示storyboard中此VC設置的界面。如下圖: 1,首先要知道是哪個storyboard,
  • 佈局layout中使用: 1 <ProgressBar 2 android:id="@+id/progress_bar" 3 style="?android:attr/progressBarStyleHorizontal" <!--必須設置為水平--> 4 android:progressDrawa
  • 分類:C#、Android、VS2015; 創建日期:2016-03-01 一、簡介 本章主要演示Started Service、帶Intent過濾器的Started Service、IntentService的基本用法,並簡單介紹Android提供的系統服務。 二、本章示例主界面 1、運行截圖 2...
  • 獲取【下載地址】 QQ: 313596790 【免費支持更新】支持三大資料庫 mysql oracle sqlsever 更專業、更強悍、適合不同用戶群體【新錄針對本系統的視頻教程,手把手教開發一個模塊,快速掌握本系統】A 代碼生成器(開發利器); 增刪改查的處理類,service層,mybatis
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...