一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術|

服務器之家 - 數(shù)據(jù)庫 - Sql Server - SQL Server遍歷表中記錄的2種方法(使用表變量和游標)

SQL Server遍歷表中記錄的2種方法(使用表變量和游標)

2019-12-31 15:58MSSQL教程網(wǎng) Sql Server

遍歷表一般都要用到游標在SQL Server中可以很容易的用游標實現(xiàn)循環(huán)實現(xiàn)遍歷表中記錄,本文將介紹使用表變量和游標實現(xiàn)數(shù)據(jù)庫中表的遍歷,感興趣的朋友可以了解下本文,或許可以幫助到你

SQL Server遍歷表一般都要用到游標,SQL Server中可以很容易的用游標實現(xiàn)循環(huán),實現(xiàn)SQL Server遍歷表中記錄。本文將介紹利用使用表變量和游標實現(xiàn)數(shù)據(jù)庫中表的遍歷。 

表變量來實現(xiàn)表的遍歷 
以下代碼中,代碼塊之間的差異已經(jīng)用灰色的背景標記。 

復制代碼代碼如下:


DECLARE @temp TABLE 

[id] INT IDENTITY(1, 1) , 
[Name] VARCHAR(10) 

DECLARE @tempId INT , 
@tempName VARCHAR(10) 
INSERT INTO @temp 
VALUES ( 'a' ) 
INSERT INTO @temp 
VALUES ( 'b' ) 
INSERT INTO @temp 
VALUES ( 'c' ) 
INSERT INTO @temp 
VALUES ( 'd' ) 
INSERT INTO @temp 
VALUES ( 'e' ) 
WHILE EXISTS ( SELECT [id] 
FROM @temp ) 
BEGIN 
SET ROWCOUNT 1 
SELECT @tempId = [id] , 
@tempName = [Name] 
FROM @temp 
SET ROWCOUNT 0 
--delete from @temp where [id] = @tempId 
PRINT 'Name:----' + @tempName 
END 


但是這種方法,必須借助ROWCOUNT。但是使用 SET ROWCOUNT 將可能會影響 DELETE、INSERT 和 UPDATE 語句。 
所以修改上面WHILE循環(huán),改用TOP來選出首條記錄。 

復制代碼代碼如下:


WHILE EXISTS ( SELECT [id] 
FROM @temp ) 
BEGIN 
SELECT TOP 1 
@tempId = [id] , 
@tempName = [Name] 
FROM @temp 
DELETE FROM @temp 
WHERE [id] = @tempId 
SELECT * 
FROM @temp 
EXEC('drop table '+) 
PRINT 'Name:----' + @tempName 
END 


這種方法也存在一個問題,需要將遍歷過的行刪除,事實上,我們在實際應用中可能并不想要遍歷完一行就刪除一行。 
利用游標來遍歷表 
  游標是非常邪惡的一種存在,使用游標經(jīng)常會比使用面向集合的方法慢2-3倍,當游標定義在大數(shù)據(jù)量時,這個比例還會增加。如果可能,盡量使用while,子查詢,臨時表,函數(shù),表變量等來替代游標,記住,游標永遠只是你最后無奈之下的選擇,而不是首選。 

復制代碼代碼如下:


--定義表變量 
DECLARE @temp TABLE 

[id] INT IDENTITY(1, 1) , 
[Name] VARCHAR(10) 

DECLARE @tempId INT , 
@tempName VARCHAR(10) 
DECLARE test_Cursor CURSOR LOCAL FOR 
SELECT [id],[name] FROM @temp 
--插入數(shù)據(jù)值 
INSERT INTO @temp 
VALUES ( 'a' ) 
INSERT INTO @temp 
VALUES ( 'b' ) 
INSERT INTO @temp 
VALUES ( 'c' ) 
INSERT INTO @temp 
VALUES ( 'd' ) 
INSERT INTO @temp 
VALUES ( 'e' ) 
--打開游標 
OPEN test_Cursor 
WHILE @@FETCH_STATUS = 0 
BEGIN 
FETCH NEXT FROM test_Cursor INTO @tempId,@tempname 
PRINT 'Name:----' + @tempName 
END 
CLOSE test_Cursor 
DEALLOCATE test_Cursor 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 女老板用丝袜脚夹我好爽 | 亚洲国产天堂久久综合网站 | 舔大逼| 亚洲天堂影院在线观看 | 青青草国产精品久久碰 | 福利一区二区在线观看 | fquer老师 | 4s4s4s4s色大众影视 | 亚洲va欧美va国产综合久久 | 国产精品资源在线观看网站 | 牛牛影院成人免费网页 | 欧美乱妇高清无乱码视频在线 | 亚洲AV中文字幕无码久久 | 红杏劫 | 精品综合久久久久久8888 | videos欧美肥婆 | 青青在线香蕉国产精品 | 激情婷婷综合久久久久 | 四虎 2022 永久网站 | 4438全国免费观看 | freesex性欧美炮机喷潮 | 国产网站视频 | 俄罗斯13一14处出血视频在线 | 男人操女人免费视频 | 国产午夜精品久久理论片小说 | 高h短篇辣肉各种姿势bl | 亚洲精品动漫在线观看 | 日韩成片| 精品国产乱码久久久久久免费流畅 | 555www成人网 | 久久理论片迅播影院一级 | 欧美一级xxxx俄罗斯一级 | 国产香蕉视频在线观看 | 美女全身无遮挡 | 校园全黄h全肉细节文 | 幻女free性俄罗斯第一次摘花 | 午夜亚洲WWW湿好大 午夜想想爱 | 精品久久洲久久久久护士免费 | oneday日本在线观看完整版 | 久久久91精品国产一区二区 | 国产欧美视频高清va在线观看 |