走近SQL Server的游標

2021-09-05 19:29:18 字數 2168 閱讀 1132

因為有的朋友不清楚游標到底是什麼?以及為什麼要用,和如何用?

這篇文章我將專門介紹這些內容

關聯式資料庫中的操作會對整個行集產生影響。由 select 語句返回的行集包括所有滿足該語句 where 子句中條件的行。由語句所返回的這一完整的行集被稱為結果集。應用程式,特別是互動式聯機應用程式,並不總能將整個結果集作為乙個單元來有效地處理。這些應用程式需要一種機制以便每次處理一行或一部分行。游標就是提供這種機制的結果集擴充套件。

游標通過以下方式擴充套件結果處理:

n 允許定位在結果集的特定行。

n 從結果集的當前位置檢索一行或多行。

n 支援對結果集中當前位置的行進行資料修改。

n 為由其他使用者對顯示在結果集中的資料庫資料所做的更改提供不同級別的可見性支援。

n 提供指令碼、儲存過程和觸發器中使用的訪問結果集中的資料的 transact-sql 語句

游標的基本用法(遍歷了employee表中所有lastname以b開頭的員工資料,這裡完全就可以根據每次取到的值進行判斷,然後進行相應的處理)

declareemployee_cursorcursor for

select lastname, firstname

from northwind.dbo.employees

where lastname like 'b%'

declare @lastname varchar(100),@firstname varchar(100)

open employee_cursor

fetch next from employee_cursorinto @lastname,@firstname –如果有多個欄位就輸出到多個變數即可

while @@fetch_status = 0

begin

print @lastname + '-' + @firstname

fetch next from employee_cursor

end

close employee_cursor

deallocate employee_cursor

更新和刪除記錄

下面這個例子,對取出來的id進行比較,如果大於1的話,就直接把這條記錄刪除掉。注意,這裡用的條件是where current of demo_cursor,就是根據游標當前所在位置的行刪除即可(假設:有乙個表叫table1,裡面有乙個int型的字段是id)

declare demo_cursor cursor for

select id from table1

declare @id int

open demo_cursor

fetch next from demo_cursor into @id

while @@fetch_status=0

begin

if @id>1

delete from table1where current ofdemo_cursor –這句**刪除當前行

update table1 set id=2where current ofdemo_cursor—這句**更新當前行的id為2

fetch next from demo_cursor into @id

end

close demo_cursor

deallocate demo_cursor

select * from table1

總結 游標一般只應用在伺服器的儲存過程中,客戶端的做法就直接可以遍歷recordset了,語法也很類似。所以,實際上可以認為游標是recordset遍歷的一種t-sql實現。

(下面**以ado為例)

dim rst as new adodb.recordset

rst.open 「select * from orders」,connection,1,1

if not rst.eof then

do until rst.eof

dosomething here

rst.movenext

loop

end if

rst.close

mysql游標很慢 Sqlserver 游標 慢

net專案中有個模組做統計功能,原先方法速度很慢,所以需要改進,統計結果如下圖 下圖接上圖後面 原先的處理方式是,這些資料分別涉及到四五張表,前台從資料庫中查詢出需要的資料集,然後分別遍歷這些資料集拼接html字串顯示在介面上。優化思考 net專案中有個模組做統計功能,原先方法速度很慢,所以需要改進...

Sql server的游標使用

專案需要為sql server的一張表,新增一列時間戳,為時間戳設定初始值,第一條資料取值乙個月前,往後的資料加1秒,使用游標完成。先貼 create procedure modifydefault as declare j datetime declare tmp varchar 72 decla...

SQL Server 中的游標

查詢語句可能返回多條記錄,如果資料量非常大,需要使用游標來逐條讀取查詢結果集中的記錄,應用程式可以根據需要滾動或瀏覽其中的資料。游標通常是在儲存過程中使用的,在儲存過程中使用select語句查詢資料庫時,查詢返回的資料存放在結果集中。使用者在得到結果集後,需要逐行逐列的獲取其中包含的資料,從而在應用...