打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
sql数据循环
1. 我猜很多人第一选择是游标,但这个效率比较低下,少量数据还行,大量数据得等好长时间     比如 我们要删除一个企业信息,条件是 Password='longaq',有时候不仅仅是一张表,如下
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
declare @ComUserID int;
Declare Mycursor cursor for SELECT ComUserID FROM dbo.Com_Users WHERE Password='longaq'
Open Mycursor
Fetch next from Mycursor into @ComUserID  --开始抓数据
while @@FETCH_STATUS = 0
begin
delete  from Com_users where comUserID=@ComUserID
delete  from Company where comUserID=@ComUserID
delete  from Position where comUserID=@ComUserID
delete from Com_logo where comuserid=@ComUserID
Fetch next from Mycursor into @ComUserID
end
Close Mycursor                         --关闭游标
Deallocate Mycursor                    --删除游标
2.使用WHILE 循环
获取需处理表的所有行以及行号,取最小行号min和最大行号max,进行循环
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DECLARE @intMinId INT,@intMaxId INT,@intClubID INT,@lngUpdateAmount BIGINT
SELECT RowID=IDENTITY(INT,1,1),A.ClubID,A.NeedAmount
INTO #templist
FROM Game.UserCreateClubDesk AS A WHERE A.ServerID=@intServerID
SELECT @intMinId =MIN(RowID),@intMaxId=MAX(RowID)
FROM #templist
WHILE @intMinId<=@intMaxId
BEGIN
SELECT @intClubID=ClubID,@lngUpdateAmount=NeedAmount
FROM #templist WHERE RowID=@intMinId
EXEC dbo.PrPsWeb_UpdateClubCash
@intClubID,
@sintSourceType,
@lngUpdateAmount,
'127.0.0.1',
@chvMemo,
NULL,
SET @intMinId=@intMinId+1
END
DROP TABLE #templist
3.还有一个for循环也有时候也能用到
利用游标循环更新MemberService表中的数据(更新每个用户所购买服务的时间)
?
01
02
03
04
05
06
07
08
09
10
11
DECLARE @UserId varchar(50)
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT UserId FROM dbo.MemberAccount) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor INTO @UserId; --读取第一行数据(将MemberAccount表中的UserId放到@UserId变量中)
WHILE @@FETCH_STATUS = 0     BEGIN         PRINT @UserId; --打印数据(打印MemberAccount表中的UserId)
UPDATE dbo.MemberService SET ServiceTime = DATEADD(Month, 6, getdate()) WHERE UserId = @UserId; --更新数据
FETCH NEXT FROM My_Cursor INTO @UserId; --读取下一行数据(将MemberAccount表中的UserId放到@UserId变量中)
END CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
GO
sql游标循环forWHILE
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SQL中的循环、for循环、游标
游标的基本写法
[转]ORACLE PL/SQ入门 - Web/.Net 开发 - 博客园
sql_游标总结 - ASPNET技术交流 - IT数码 - 搜狐圈子
数据库:SQLServer中游标的用法笔记
sqlserver 游标全面解说
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服