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
版权归原作者 冰封剑心 所有, 如有侵权,请联系我们删除。