0


SQL 循环语句几种写法

1、if语句使用示例

1

2

3

4

5

6

7

8

9

10

declare
@a 
int
set
@a=12
if @a>100
begin
  
print @a
end
else
begin
  
print 
'no'
end

2、while语句使用示例

1

2

3

4

5

6

7

8

declare
@i 
int
set
@i=1
while @i<30
begin
  
insert
into
test (userid) 
values
(@i)
set
@i=@i+1
end
-- 设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。 

3、临时表和try

1

2

3

4

5

6

7

8

-- 增加临时表
select
* 
into
#csj_temp 
from
csj
-- 删除临时表 用到try
begin
try 
-- 检测代码开始
  
drop
table
#csj_temp
end
try
begin
catch 
-- 错误开始
end
catch

4、正常循环语句

1

2

3

4

5

6

7

8

9

10

11

12

13

14

declare
@orderNum 
varchar
(255)
create
table
#ttableName(id 
int
identity(1,1),Orders 
varchar
(255))
declare
@n 
int
,@
rows
int
insert
#ttableName(orders) 
select
orderNum 
from
pe_Orders 
where
orderId<50
--select @rows=count(1) from pe_Orders
select
@
rows
=@@rowcount
set
@n=1
while @n<=@
rows
begin
  
select
@orderNum=OrderNum 
from
PE_Orders 
where
OrderNum=(
select
Orders 
from
#ttableName 
where
id=@n)
  
print (@OrderNum)
  
select
@n=@n+1
end
drop
table
#ttableName

5、不带事务的游标循环

1

2

3

4

5

6

7

8

9

10

11

12

13

declare
@orderN 
varchar
(50)  
--临时变量,用来保存游标值
declare
y_curr 
cursor
for
--申明游标 为orderNum
select
orderNum 
from
pe_Orders 
where
orderId<50
open
y_curr   
--打开游标
fetch
next
from
Y_curr 
into
@orderN   
----开始循环游标变量
while(@@fetch_status=0)  
---返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
begin
  
print (@orderN)
  
update
pe_Orders 
set
Functionary+@orderN 
where
orderNum=@orderN   
--操作数据库
  
fetch
next
from
y_curr 
into
@orderN   
--开始循环游标变量
end
close
y_curr  
--关闭游标
deallocate
y_curr   
--释放游标

6、带事务的游标循环

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

select
orderNum,userName,MoneyTotal 
into
#t 
from
pe_Orders po
DECLARE
@n 
int
,@error 
int
--set @n=1
set
@error=0
BEGIN
TRAN   
--申明 开始事务
declare
@orderN 
varchar
(50),@userN 
varchar
(50)   
--临时变量,用来保存游标值
declare
y_curr 
cursor
for
   
--申明游标 为orderNum,userName
select
orderNum,userName 
from
PE_Orders 
where
Orderid<50
open
y_curr
fetch
next
from
y_curr 
into
@orderN,@userN
while @@fetch_status = 0
BEGIN
  
select
isnull
(
sum
(MoneyTotal),0),orderNum 
from
#t 
where
username=@userN
  
-- set @n=@n+1
  
set
@error=@error+@@error  
--记录每次运行sql后 是否正确 0正确
  
fetch
next
from
y_curr 
into
@orderN,@userN
END
IF @error=0
BEGIN
  
commit
tran   
---事务提交
END
ELSE
BEGIN
  
ROLLBACK
TRAN   
---事务回滚
END
close
y_curr
deallocate
y_curr
DROP
TABLE
#t

7、游标循环读记录

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

declare
@temp_temp 
int
--declare @Cur_Name
--@Cur_Name="aaa"
--------------------------------- 创建游标 --Local(本地游标)
DECLARE
aaa 
CURSOR
for
select
House_Id 
from
House_House 
where
Deleted=0 
or
deleted 
is
null
----------------------------------- 打开游标
Open
aaa
----------------------------------- 遍历和获取游标
fetch
next
from
aaa 
into
@temp_temp
--print @temp_temp
while @@fetch_status=0
begin
  
--做你要做的事
  
select
* 
from
House_monthEnd 
where
House_Id=@temp_temp
  
fetch
next
from
aaa 
into
@temp_temp 
-- 取值赋给变量
--
end
----------------------------------- 关闭游标
Close
aaa
----------------------------------- 删除游标
Deallocate
aaa
标签: sql 数据库

本文转载自: https://blog.csdn.net/yuanzhengang/article/details/127459203
版权归原作者 冰封剑心 所有, 如有侵权,请联系我们删除。

“SQL 循环语句几种写法”的评论:

还没有评论