1、if语句使用示例

1

2

3

4

5

6

7

8

9

10

declare@aint

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@iint

set@i=1

while @i<30

begin

insertintotest (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_tempfromcsj

-- 删除临时表 用到try

begintry-- 检测代码开始

droptable#csj_temp

endtry

begincatch-- 错误开始

endcatch

  

4、正常循环语句

1

2

3

4

5

6

7

8

9

10

11

12

13

14

declare@orderNumvarchar(255)

createtable#ttableName(idintidentity(1,1),Ordersvarchar(255))

declare@nint,@rowsint

insert#ttableName(orders)selectorderNumfrompe_OrderswhereorderId<50

--select @rows=count(1) from pe_Orders

select@rows=@@rowcount

set@n=1

while @n<=@rows

begin

select@orderNum=OrderNumfromPE_OrderswhereOrderNum=(selectOrdersfrom#ttableNamewhereid=@n)

print (@OrderNum)

select@n=@n+1

end

droptable#ttableName

5、不带事务的游标循环

1

2

3

4

5

6

7

8

9

10

11

12

13

declare@orderNvarchar(50)  --临时变量,用来保存游标值

declarey_currcursorfor  --申明游标 为orderNum

selectorderNumfrompe_OrderswhereorderId<50

openy_curr   --打开游标

fetchnextfromY_currinto@orderN   ----开始循环游标变量

while(@@fetch_status=0)  ---返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。

begin

print (@orderN)

updatepe_OrderssetFunctionary+@orderNwhereorderNum=@orderN   --操作数据库

fetchnextfromy_currinto@orderN   --开始循环游标变量

end

closey_curr  --关闭游标

deallocatey_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

selectorderNum,userName,MoneyTotalinto#tfrompe_Orders po

DECLARE@nint,@errorint

--set @n=1

set@error=0

BEGINTRAN   --申明 开始事务

declare@orderNvarchar(50),@userNvarchar(50)   --临时变量,用来保存游标值

declarey_currcursorfor  --申明游标 为orderNum,userName

selectorderNum,userNamefromPE_OrderswhereOrderid<50

openy_curr

fetchnextfromy_currinto@orderN,@userN

while @@fetch_status = 0

BEGIN

selectisnull(sum(MoneyTotal),0),orderNumfrom#twhereusername=@userN

-- set @n=@n+1

set@error=@error+@@error  --记录每次运行sql后 是否正确 0正确

fetchnextfromy_currinto@orderN,@userN

END

IF @error=0

BEGIN

committran   ---事务提交

END

ELSE

BEGIN

ROLLBACKTRAN   ---事务回滚

END

closey_curr

deallocatey_curr

DROPTABLE#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_tempint

--declare @Cur_Name

--@Cur_Name="aaa"

--------------------------------- 创建游标 --Local(本地游标)

DECLAREaaaCURSORforselectHouse_IdfromHouse_HousewhereDeleted=0ordeletedisnull

----------------------------------- 打开游标

Openaaa

----------------------------------- 遍历和获取游标

fetchnextfromaaainto@temp_temp

--print @temp_temp

while @@fetch_status=0

begin

--做你要做的事

select*fromHouse_monthEndwhereHouse_Id=@temp_temp

fetchnextfromaaainto@temp_temp-- 取值赋给变量

--

end

----------------------------------- 关闭游标

Closeaaa

----------------------------------- 删除游标

Deallocateaaa