SQL Server 遊標使用

來源:互聯網
上載者:User

   遊標概念

  資料庫操作中我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?遊標為我們提供了一種極為優秀的解決方案。

  遊標(cursor)是系統為使用者開設的一個資料緩衝區,存放SQL語句的執行結果。

  每個遊標區都有一個名字。使用者可以用SQL語句逐一從遊標中擷取記錄,並賦給主變數,交由主語言進一步處理。遊標提供了一種對從表中檢索出的資料進行操作的靈活手段,就本質而言,遊標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制。

  遊標總是與一條SQL 查詢語句相關聯因為遊標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的遊標位置群組成。

  當決定對結果集進行處理時,必須聲明一個指向該結果集的遊標。如果曾經用C 語言寫過對檔案進行處理的程式,那麼遊標就像您開啟檔案所得到的檔案控制代碼一樣,只要檔案開啟成功,該檔案控制代碼就可代表該檔案。對於遊標而言,其道理是相同的。可見遊標能夠實現按與傳統程式讀取一般檔案類似的方式處理來自基礎資料表的結果集,從而把表中資料以一般檔案的形式呈現給程式。

  我們知道關聯式資料庫管理系統實質是面向集合的,在MS SQL SERVER 中並沒有一種描述表中單一記錄的表達形式,除非使用where 子句來限制只有一條記錄被選中。

  因此我們必須藉助於遊標來進行面向單條記錄的資料處理。由此可見,遊標允許應用程式對查詢語句select 返回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作;它還提供對基於遊標位置而對錶中資料進行刪除或更新的能力;而且,正是遊標把作為面向集合的資料庫管理系統和面向行的程式設計兩者聯絡起來,使兩個資料處理方式能夠進行溝通。

  遊標的使用一般是這樣,個人理解:定義遊標-->開啟遊標-->Fetch next from into --> where @@fech_status=0(這個類似C語言中的指標) -->Fetch next from into -->end -->關閉遊標(close 遊標名)-->Deallocate 遊標

  具體案例:

  定義遊標 Test_Cursor ,

  declare @paraA nvarchar(50)--定義參數

  declare @paraB nvarchar(50)--定義參數

  declare @paraC nvarchar(50)--定義參數

  declare Test_Cursor cursor local for--定義遊標

  開啟遊標 ,定義要遊標的結果集

  --相當於要遍曆的表內容

  select

  tableA_columnA,

  tableA_columnB,

  tableA_columnC

  from tableA

  --相當於將指標指向這個表頭,指向該資料表集的第一條記錄,

  open Test_Cursor fetch next from Test_Cursor into

  @paraA,

  @paraB,

  @paraC

  while @@fetch_status=0

  迴圈遍曆資料集中的內容,一條條做

  begin

  insert into

  tableB(

  tableB_columnA,

  tableB_columnB,

  tableB_columnC)

  values(

  @paraA,

  @paraB,

  @paraC)

  fetch next from Test_Cursor into

  @paraA,

  @paraB,

  @paraC

  end

  關閉和收尾回收記憶體

  close Test_Cursor

  deallocate Test_Cursor

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.