當前位置:首頁 » 編程語言 » sql游標
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql游標

發布時間: 2022-02-04 22:05:19

1. sql中的游標是幹嘛的

游標(cursor)是結果集的邏輯擴展,可以看做指向結果集的一個指針,通過使用游標,應用程序可以逐行訪問並處理結果集。

ResultSet對象用於接收查詢結果,next()方法用於判斷結果集是否為空,相當於指針,指向結果集下一個數據。

(1)sql游標擴展閱讀:

游標的生命周期包含有五個階段:聲明游標、打開游標、讀取游標數據、關閉游標、釋放游標。

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

2. sql 游標 是什麼意思

declare cr_cursor cursor --1.定義游標
for select name from dbo.sysobjects where xtype='U' and status>0
--?????? 這里是獲取記錄
fetch next From cr_cursor into @Table --??這里是用變數@Table保存獲取到的select 【name】 from dbo.sysobjects where xtype='U' and status>0
name的值
fetch next From cr_cursor into @Table--這句話的完整意思是
將游標移動到下一條記錄並將獲取到是name值賦值給變數@Table
----------------------------------------------------------------------
給你一個例子 和說明 我看來幾遍就學會游標了 下面是例子
---------------------------------------------------------------------
定義游標
Declare MyCursor Cursor For
Select Field1,Field2
From MyTable
Where (Field1 Like '%123%') And (Field2 = 'qqq') And (Field3 Is Not Null) And ......
Group By Field1,Field2
For Read Only
Open MyCursor

移動游標
fetch first from 游標 into 變數列表

取下一條
fetch next from 游標 into 變數列表

取第n條
fetch absolute n from 游標 into 變數列表

例子

日前,因工作需要累加某表裡面的某欄位的全部值,
比如有個表,內容如下
id,text
1,春花秋月何時了
2,往事知多少
3,小樓昨夜又春風
4,古國不堪回首月明中
......
其中id為系列號,text為文本內容,我想使用個sql語句,達到如下效果:
查詢text列,查詢的值累加,即查詢結果顯示如下:
春花秋月何時了 往事知多少 小樓昨夜又春風 古國不堪回首月明中 ...
存儲過程+游標實現,示例如下
ALTER PROCEDURE [dbo].[abc]
-- Add the parameters for the stored procere here
@p1 int

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @ttt varchar(100);
declare @bbb varchar(10);
set @ttt=''
set @bbb=''
declare mycur cursor for
select meno from test where gid= @p1
open mycur
fetch next from mycur into @bbb
WHILE @@FETCH_STATUS = 0
BEGIN
set @ttt=@ttt+@bbb
fetch next from mycur into @bbb
end
close mycur
select @ttt

3. sql 中的 游標有什麼作用

因為我們做的數據量大,而且系統上跑的不只我們一個業務。所以,我們都要求盡量避免使用游標,游標使用時會對行加鎖,可能會影響其他業務的正常進行。而且,數據量大時其效率也較低效。另外,內存也是其中一個限制。因為游標其實是相當於把磁碟數據整體放入了內存中,如果游標數據量大則會造成內存不足,內存不足帶來的影響大家都知道了。所以,在數據量小時才使用游標。

4. sql游標的寫法

給你一個游標的寫法。
此demo的目地是將游標行的name更新到另一張表的欄位中條件是2張表的ID相同

Declare@Idvarchar(20)
Declare@Namevarchar(20)
DeclareCurCursorFor
selectid,namefromtemp1
OpenCur
FetchnextFromCurInto@Id,@Name
While@@fetch_status=0
Begin
UpdatetempSet[c3]=@Namewhere[id]=@Id
FetchNextFromCurInto@Id,@Name
End
CloseCur
DeallocateCur

5. 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

6. sql游標怎麼使用

先定義游標打游標使用游標關閉
知道用版本SQL
現都少用游標比較耗資源

7. SQL游標如何使用

A. 在簡單的游標中使用 FETCH
下例為 authors 表中姓以字母 B 開頭的行聲明了一個簡單的游標,並使用 FETCH NEXT 逐個提取這些行。FETCH 語句以單行結果集形式返回由 DECLARE CURSOR 指定的列的值。

USE pubs
GO
DECLARE authors_cursor CURSOR FOR
SELECT au_lname FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname

OPEN authors_cursor

-- Perform the first fetch.
FETCH NEXT FROM authors_cursor

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM authors_cursor
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

au_lname
----------------------------------------
Bennet
au_lname
----------------------------------------
Blotchet-Halls
au_lname
----------------------------------------

B. 使用 FETCH 將值存入變數
下例與上例相似,但 FETCH 語句的輸出存儲於局部變數而不是直接返回給客戶端。PRINT 語句將變數組合成單一字元串並將其返回到客戶端。

USE pubs
GO

-- Declare the variables to store the values returned by FETCH.
DECLARE @au_lname varchar(40), @au_fname varchar(20)

DECLARE authors_cursor CURSOR FOR
SELECT au_lname, au_fname FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.

FETCH NEXT FROM authors_cursor
INTO @au_lname, @au_fname

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN

-- Concatenate and display the current values in the variables.
PRINT "Author: " + @au_fname + " " + @au_lname

-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM authors_cursor
INTO @au_lname, @au_fname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

Author: Abraham Bennet
Author: Reginald Blotchet-Halls

C. 聲明 SCROLL 游標並使用其它 FETCH 選項
下例創建一個 SCROLL 游標,使其通過 LAST、PRIOR、RELATIVE 和 ABSOLUTE 選項支持所有滾動能力。

USE pubs
GO

-- Execute the SELECT statement alone to show the
-- full result set that is used by the cursor.
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

-- Declare the cursor.
DECLARE authors_cursor SCROLL CURSOR FOR
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Fetch the last row in the cursor.
FETCH LAST FROM authors_cursor

-- Fetch the row immediately prior to the current row in the cursor.
FETCH PRIOR FROM authors_cursor

-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM authors_cursor

-- Fetch the row that is three rows after the current row.
FETCH RELATIVE 3 FROM authors_cursor

-- Fetch the row that is two rows prior to the current row.
FETCH RELATIVE -2 FROM authors_cursor

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

au_lname au_fname
---------------------------------------- --------------------
Bennet Abraham
Blotchet-Halls Reginald
Carson Cheryl
DeFrance Michel
del Castillo Innes
Dull Ann
Green Marjorie
Greene Morningstar
Gringlesby Burt
Hunter Sheryl
Karsen Livia
Locksley Charlene
MacFeather Stearns
McBadden Heather
O'Leary Michael
Panteley Sylvia
Ringer Albert
Ringer Anne
Smith Meander
Straight Dean
Stringer Dirk
White Johnson
Yokomoto Akiko

au_lname au_fname
---------------------------------------- --------------------
Yokomoto Akiko
au_lname au_fname
---------------------------------------- --------------------
White Johnson
au_lname au_fname
---------------------------------------- --------------------
Blotchet-Halls Reginald
au_lname au_fname
---------------------------------------- --------------------
del Castillo Innes
au_lname au_fname
---------------------------------------- --------------------
Carson Cheryl

8. sql 中游標的作用及使用方法

游標可以從資料庫中查詢出一個結果集,在你關閉它之前,你可以反復使用這個結果集,讀取這個結果集中的任意行任意欄位的內容,一般在存儲過程或前台程序中常見。

9. sql中的游標是什麼怎樣用呢

在資料庫中,游標提供了一種對從表中檢索出的數據進行操作的靈活手段。就本質而言,游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。
游標總是與一條SQL
選擇語句相關聯因為游標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的游標位置組成。
游標關於資料庫中的操作會對整個行集產生影響。由 SELECT 語句返回的行集包括所有滿足該語句 WHERE 子句中條件的行。由語句所返回的這一完整的行集被稱為結果集。
應用程序,特別是互動式聯機應用程序,並不總能將整個結果集作為一個單元來有效地處理。這些應用程序需要一種機制以便每次處理一行或一部分行。游標就是提供這種機制的結果集擴展。
(9)sql游標擴展閱讀:
游標通過以下方式擴展結果處理:
1.允許定位在結果集的特定行。
2.從結果集的當前位置檢索一行或多行。
3.支持對結果集中當前位置的行進行數據修改。
4.為由其他用戶對顯示在結果集中的資料庫數據所做的更改提供不同級別的可見性支持。
5.提供腳本、存儲過程和觸發器中使用的訪問結果集中的數據的 Transact-SQL 語句。
參考資料來源:搜狗網路—游標

10. SQL中游標是指什麼怎麼用的又什麼作用

SQL語言是面向集合的,是運用關系進行運算,最擅長於集合運算。
有些功能要求也各一個地取出記錄,進行運算,正規的關系語言SQL實現不了,於是衍生出過程化的
SQL游標,來逐個的取出記錄。