SQL Server用游标循环遍历结果集

版权声明: https://blog.csdn.net/ClearLoveQ/article/details/83579287

1.SQL Server中select  和set 都是赋值用的

DECLARE 
@A1 INT
@A2 INT

SET @A1=10
WHILE @A1>0
BEGIN
	SELECT @A2=@A1
	PRINT @A1+@A2
	Set @A1=@A1-1
END 

2.用游标将表中查出的一个变量存储到一个变量中

DECLARE 
@A1 INT,
@A2 INT

DECLARE YOUCURNAME CURSOR FOR SELECT  
	   Accnt_SN
       FROM FAC_COA WHERE SN=2537
OPEN YOUCURNAME --打开游标
fetch next from youcurname into @a1 
 PRINT @A1
close youcurname    --关闭游标
deallocate youcurname   --释放游标

3.循环:用游标对表查出的结果集(先测试一列的情况)进行遍历

DECLARE 
@A1 VARCHAR(100)  --处理结果的变量

DECLARE YOUCURNAME CURSOR FOR SELECT  
	   Accnt_Code      --一列
       FROM FAC_COA    --查询语句
OPEN YOUCURNAME 
FETCH NEXT FROM youcurname INTO  @A1 
WHILE(@@FETCH_STATUS=0) 
 BEGIN
  PRINT @A1  --处理结果
  FETCH NEXT FROM youcurname INTO  @A1 --下一条
 END 
CLOSE youcurname 
DEALLOCATE youcurname

4.循环:用游标对表查出的结果集(测试多列列的情况)进行遍历

DECLARE 
@A1 VARCHAR(100),
@A2 VARCHAR(100)  --处理结果的变量

DECLARE YOUCURNAME CURSOR FOR SELECT  
	   Accnt_Code,Accnt_Name   --多列
       FROM FAC_COA    --查询语句
OPEN YOUCURNAME 
FETCH NEXT FROM youcurname INTO  @A1,@A2    --此处变量位置和查询的列要对应类型
WHILE(@@FETCH_STATUS=0) 
 BEGIN
  PRINT @A1 + @A2  --处理结果
  FETCH NEXT FROM youcurname INTO  @A1,@A2 --下一条
 END 
CLOSE youcurname 
DEALLOCATE youcurname

5.@@fetch_status

@@fetch_status是MSSQL的一个全局变量

其值有以下三种,分别表示三种不同含义:【返回类型integer】

0 FETCH 语句成功

-1 FETCH 语句失败或此行不在结果集中

-2 被提取的行不存在

@@fetch_status值的改变是通过fetch next from实现的

在遍历循环结果集中,需要“FETCH NEXT FROM Cursor” 进行跳入下一行

6.临时表

#号加名字  创建临时表:

SELECT * INTO #interim FROM FAC_COA
SELECT *FROM #interim

删除临时表:

drop table #interim

猜你喜欢

转载自blog.csdn.net/ClearLoveQ/article/details/83579287