游標模板
複製**
--declare test_cursor cursor global for --全域性游標,在批處理結束後依然有效
--declare test_cursor cursor local for --區域性游標,在批處理結束後,被隱式釋放,無法在其他批處理中呼叫
--declare test_cursor cursor forward_only for --預設和forward_only選項只支援fetch next選項,不支援游標向後或者走向特定位置
--declare test_cursor cursor scroll for --scroll選項支援游標向任何方向移動
--fetch last from test_cursor into @id,@name --取最後一行
--fetch first from test_cursor into @id,@name --取第一行
--fetch prior from test_cursor into @id,@name --取上一行
--fetch absolute 3 from test_cursor into @id,@name --第三行
--fetch relative -1 from test_cursor into @id,@name 取相對目前來說上一行
create procedure pk_test
as --宣告2個變數
declare @o_id nvarchar(20)
declare @a_salary float
--宣告乙個游標mycursor,select語句中引數的個數必須要和從游標取出的變數名相同
declare mycursor cursor for select o_id,a_salary from addsalary
--開啟游標
open mycursor
--從游標裡取出資料賦值到我們剛才宣告的2個變數中
fetch next from mycursor into @o_id,@a_salary
--判斷游標的狀態
-- 0 fetch語句成功
---1 fetch語句失敗或此行不在結果集中
---2 被提取的行不存在
while (@@fetch_status=0)
begin
--顯示出我們每次用游標取出的值
print '游標成功取出一條資料'
print @o_id
print @a_salary
--用游標去取下一條記錄
fetch next from mycursor into @o_id,@a_salary
end
--關閉游標
close mycursor
--撤銷游標
deallocate mycursor
go複製**
對於游標一些優化建議
如果能不用游標,盡量不要使用游標
用完用完之後一定要關閉和釋放
盡量不要在大量資料上定義游標
盡量不要使用游標上更新資料
盡量不要使用insensitive, static和keyset這些引數定義游標
如果可以,盡量使用fast_forward關鍵字定義游標
如果只對資料進行讀取,當讀取時只用到fetch next選項,則最好使用forward_only引數
SQL游標操作
select count id from info select from info 清除所有記錄 truncate table info declare i int set i 1 while i 1000000 begin insert into info values justin str i...
sql 迴圈,游標
declare userid varchar 50 declare my cursor cursor 定義游標 for select userid from dbo.memberaccount 查出需要的集合放到游標中 open my cursor 開啟游標 fetch next from my c...
sql游標小記
游標優點 游標允許應用程式對查詢語句select 返回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作 它還提供對基於游標位置而對錶中資料進行刪除或更新的能力 缺點 處理大資料量時,效率低下,占用記憶體大 一般來說,能使用其他方式處理資料時,最好不要使用游標,除非是當你使...