Ⅰ sql Server 中游標是什麼
游標(cursor)是系統為用戶開設的一個數據緩沖區,存放SQL語句的執行結果。每個游標區都有一個名字。用戶可以用SQL語句逐一從游標中獲取記錄,並賦給主變數,交由主語言進一步處理。
一般是在需要對查詢的結果集中的數據再進行二次處理才會用到。
Ⅱ SQL游標怎麼用
例子
table1結構如下
id int
name varchar(50)
declare @id int
declare @name varchar(50)
declare cursor1 cursor for --定義游標cursor1
select * from table1 --使用游標的對象(跟據需要填入select文)
open cursor1 --打開游標
fetch next from cursor1 into @id,@name --將游標向下移1行,獲取的數據放入之前定義的變數@id,@name中
while @@fetch_status=0 --判斷是否成功獲取數據
begin
update table1 set name=name+'1'
where id=@id --進行相應處理(跟據需要填入SQL文)
fetch next from cursor1 into @id,@name --將游標向下移1行
end
close cursor1 --關閉游標
deallocate cursor1
Ⅲ 資料庫中游標的作用是什麼
游標在處理數據中提供了在結果集中一次一行或者多行前進或向後瀏覽數據的能力,可以把游標當作一個指針,它可以指定結果中的任何位置,然後允許用戶對指定位置的數據進行處理。
游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。游標可以被看作是一個查詢結果集和結果集中指向特定記錄的游標位置組成的一個臨時文件,提供了在查詢結果集中向前或向後瀏覽數據、處理結果集中數據的能力。
有了游標,用戶就可以訪問結果集中任意一行數據,在將游標放置到某行之後,可以在該行或從該位置的行塊上執行操作。
(3)sql2000游標擴展閱讀
游標的類型
MS SQL SERVER 支持三種類型的游標:Transact_SQL 游標,API伺服器游標和客戶游標。
1、Transact_SQL 游標
Transact_SQL 游標由DECLARE CURSOR 語法定義、主要用在Transact_SQL腳本、存儲過程和觸發器中。Transact_SQL 游標主要用在伺服器上,由從客戶端發送給伺服器的Transact_SQL 語句或是批處理、存儲過程、觸發器中的Transact_SQL 進行管理。
2、API游標
API 游標支持在OLE DB, ODBC 以及DB_library 中使用游標函數,主要用在伺服器上。每一次客戶端應用程序調用API 游標函數,MS SQL SEVER 的OLE DB 提供者、ODBC驅動器或DB_library 的動態鏈接庫都會將這些客戶請求傳送給伺服器以對API游標進行處理。
3、客戶游標
客戶游標主要是當在客戶機上緩存結果集時才使用。在客戶游標中,有一個預設的結果集被用來在客戶機上緩存整個結果集。客戶游標僅支持靜態游標而非動態游標。由於API 游標和Transact-SQL 游標使用在伺服器端,所以被稱為伺服器游標,也被稱為後台游標,而客戶端游標被稱為前台游標。
Ⅳ SQL Server2000游標循環,如何修改,可使兩條fetch語句變成一條
首先說明,樓主讀取游標的寫法是正確規范的寫法,效率應該也是最高的,不明白為什麼非要只讓fetch出現一次。
如果非要這樣,可以按這個思路,在定義游標之後,再統計出此游標將會查詢出的記錄總數,然後定義變數,在循環中使變數增1,超過游標記錄總數後,循環中止。具體代碼如下:
CREATE PROCEDURE PROC_comp @Now_Date smalldatetime AS
declare @Pre_Sum_Amount numeric(18,2),@Now_Amount numeric(18,2),@Now_Sum_Amount numeric(18,2)
--搜尋前一條記錄的累計金額(注意參數top 1及desc,表示倒序排列並取第一條)。
select top 1 @Pre_Sum_Amount=累計金額 from 報表2009
where 日期<@Now_Date and 日期>='2009-10-1' order by 日期 desc
set @Pre_Sum_Amount=isnull(@Pre_Sum_Amount,0)
--建立游標,計算本條記錄的累計金額,並依次向後,計算出後續各條記錄的累計金額。
declare cur_Accumulate cursor dynamic for
select 金額,累計金額 from 報表2009 where 日期>='2009-10-1' and 日期<='2009-10-31'
declare @t as integer,@n as integer
set @n=1
select @t=count(1) from 報表2009 where 日期>='2009-10-1' and 日期<='2009-10-31'
open cur_Accumulate
while(@n<=@t)
begin
fetch next from cur_Accumulate into @Now_Amount,@Now_Sum_Amount
set @Now_Sum_Amount=@Pre_Sum_Amount+isnull(@Now_Amount,0)
update 報表2009 set 累計金額=@Now_Sum_Amount where current of cur_Accumulate
set @Pre_Sum_Amount=@Now_Sum_Amount
set @n=@n+1
end
close cur_Accumulate
deallocate cur_Accumulate
Ⅳ 關於SQL 2000游標的問題
while
@@fetch_status
=
0
begin
print
@sd1
+
'
'
+
@sn1
+
'
'
+
cast(@sg1
as
char(2))
--上面這些你明白
--提取一下個游標記錄存放到
@sd2.....
中
fetch
next
from
cur_sage
into
@sd2,
@sn2,
@sg2
--列印出來,cast
表示類型轉換
print
@sd2
+
'
'
+
@sn2
+
'
'
+
cast(@sg2
as
char(2))
--判斷兩個人是否為一個系
and
判斷@@fetch_status狀態成為0的話
0
--的話
代表成功
-1的話代表不成功
while
@sd1
=
@sd2
and
@@fetch_status
=
0
--當上面的條件成立將提取下一個游標記錄繼續和@sd1比較,
--直到下條記錄學生所在系不同或者游標位置為最後一行後面
fetch
next
from
cur_sage
into
@sd2,
@sn2,
@sg2
--判斷狀態
if
@@fetch_status
=
0
--如果為0,將第二個學生的數據賦給第一個,然後在回到第一個while循
--環,繼續判斷,不過這個程序我也不知道它想做什麼,迷糊...
begin
set
@sd1
=
@sd2
set
@sn1
=
@sn2
set
@sg1
=
@sg2
end
end
--關閉游標
close
cur_sage
--清除游標
deallocate
cur_sage
Ⅵ Sql Server 2000 中 如何應用游標用游標有什麼優缺點
http://hi..com/wangqing999/blog/item/49b9c7280c4963e28b139970.html
SQL Server 游標處理例子.
用游標優點:
某些復雜的業務,簡單的一句SQL無法處理的,可以用游標處理。
缺點:
如果游標 嵌套游標的處理, 運行效率比較低。
Ⅶ SQL2000 在WHILE循環加入游標循環 提示:名為 'tnames_cursor' 的游標已存在。
CLOSE tnames_cursor
關閉之後要釋放,就是刪除
DEALLOCATE tnames_cursor --釋放游標
Ⅷ sql 游標是什麼東西
游標是系統為用戶開設的一個數據緩沖區,用於存放SQL語句的執行結果。每個游標區都有一個名字。用戶可以用SQL語句逐一從游標中獲取記錄,並賦給主變數,交由主語言進一步處理。
Ⅸ Sql中的游標是幹嘛的
游標(cursor)是結果集的邏輯擴展,可以看做指向結果集的一個指針,通過使用游標,應用程序可以逐行訪問並處理結果集。
ResultSet對象用於接收查詢結果,next()方法用於判斷結果集是否為空,相當於指針,指向結果集下一個數據。
(9)sql2000游標擴展閱讀:
游標的生命周期包含有五個階段:聲明游標、打開游標、讀取游標數據、關閉游標、釋放游標。
1、聲明游標語法
DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
2、打開游標語法
open [ Global ] cursor_name | cursor_variable_name
3、讀取游標數據語法
Fetch[ [Next|prior|Frist|Last|Absoute n|Relative n ]from ][Global] cursor_name[into @variable_name[,....]]
4、關閉游標語法
close [ Global ] cursor_name | cursor_variable_name
5、釋放游標語法
deallocate cursor_name
Ⅹ sql 2000游標的問題
樓上的胡說寫什麼啊,樓主要的是顯示內容的問題,你給人家回答一個修改的問題,
select case when 姓名 like '王%' then '該同學姓為:'+left(姓名,1)+',名為'+right(姓名,len(姓名)-1) else 姓名 end as 姓名 from 借書證表
用這個方法就行了,這個問題不用游標,游標的執行效率很低的
以上,希望對你有所幫助!