當前位置:首頁 » 存儲配置 » sql存儲過程游標

sql存儲過程游標

發布時間: 2022-07-10 03:18:32

存儲過程為什麼要用游標,什麼情況下使用游標

游標一般用於把通過腳本得到的結果集的內容在用於其它的sql語句中。但是游標執行會影響腳本執行速度,所以使用時請慎重。 在存儲過程或觸發器中使用 SQL 游標的典型過程為: 聲明SQL 變數包含游標返回的數據。為每個結果集列聲明一個變數。聲明足夠大的變數來保存列返回的值,並聲明變數的類型為可從列數據類型隱式轉換得到的數據類型。

使用 DECLARE CURSOR 語句將 SQL 游標與 SELECT 語句相關聯。另外,DECLARE CURSOR 語句還定義游標的特性,例如游標名稱以及游標是只讀還是只進。

使用 OPEN 語句執行 SELECT 語句並填充游標。

使用 FETCH INTO 語句提取單個行,並將每列中的數據移至指定的變數中。然後,其他 SQL 語句可以引用那些變數來訪問提取的數據值。SQL 游標不支持提取行塊。

使用 CLOSE 語句結束游標的使用。關閉游標可以釋放某些資源,例如游標結果集及其對當前行的鎖定,但如果重新發出一個 OPEN 語句,則該游標結構仍可用於處理。由於游標仍然存在,此時還不能重新使用該游標的名稱。DEALLOCATE 語句則完全釋放分配給游標的資源,包括游標名稱。釋放游標後,必須使用 DECLARE 語句來重新生成游標。

請採納。

⑵ Sql 存儲過程加游標結合的使用

CREATE proc jiagongzi
as
declare @name nvarchar(20)
declare @xueli nvarchar(20)
declare @time datetime
declare @gongzi intdeclare zengjia cursor scroll
for
select * from 職員表
open zengjia
fetch next from zengjia into @name,@xueli,@time,@gongzi
while @@FETCH_STATUS=0
begin
if (@xueli='本科' or @xueli='碩士') and DATEDIFF(year, @time, getdate())>=3
begin
update 職員表 set 工資=@gongzi+@gongzi*0.1 where 姓名=@name
end
if (@xueli<>'本科' and @xueli<>'碩士') and DATEDIFF(year, @time, getdate())>=10
begin
update 職員表 set 工資=@gongzi+@gongzi*0.08 where 姓名=@name
end
fetch next from zengjia into @name,@xueli,@time,@gongzi
end
close zengjia
deallocate zengjia goexec jiagongzi

⑶ 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

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

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

⑸ Sql中的游標是幹嘛的

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

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

(5)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

⑹ sql 存儲過程用游標更新

SQL Server的T-SQL沒有類似C語言的+=, -=的賦值語句,那句"@asum += 1"要老實寫成:

set@asum=@asum+1
熱點內容
賽爾編程 發布:2024-10-08 22:30:12 瀏覽:161
威馳車有哪些配置 發布:2024-10-08 22:19:32 瀏覽:564
手游源碼全套 發布:2024-10-08 21:39:41 瀏覽:474
大眾賬號密碼是多少 發布:2024-10-08 21:22:18 瀏覽:890
價格厚道香港多ip伺服器 發布:2024-10-08 21:22:16 瀏覽:283
android適配values 發布:2024-10-08 21:18:36 瀏覽:240
數控折彎機如何編程 發布:2024-10-08 20:34:40 瀏覽:61
pod內部修改配置如何生效 發布:2024-10-08 20:25:33 瀏覽:237
重慶伺服器託管市場低價雲主機 發布:2024-10-08 20:23:39 瀏覽:364
運維接觸源碼 發布:2024-10-08 19:55:44 瀏覽:486