日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql如何遍历几百万的表_SQL Server遍历表中记录的2种方法(使用表变量和游标)

發布時間:2023/12/10 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql如何遍历几百万的表_SQL Server遍历表中记录的2种方法(使用表变量和游标) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

表變量來實現表的遍歷

以下代碼中,代碼塊之間的差異已經用灰色的背景標記。

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循環,改用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

這種方法也存在一個問題,需要將遍歷過的行刪除,事實上,我們在實際應用中可能并不想要遍歷完一行就刪除一行。

利用游標來遍歷表

游標是非常邪惡的一種存在,使用游標經常會比使用面向集合的方法慢2-3倍,當游標定義在大數據量時,這個比例還會增加。如果可能,盡量使用while,子查詢,臨時表,函數,表變量等來替代游標,記住,游標永遠只是你最后無奈之下的選擇,而不是首選。

--定義表變量

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

--插入數據值

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

總結

以上是生活随笔為你收集整理的sql如何遍历几百万的表_SQL Server遍历表中记录的2种方法(使用表变量和游标)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。