1. 程式人生 > >SQL Server用遊標迴圈遍歷結果集

SQL Server用遊標迴圈遍歷結果集

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

DECLARE 
@A1 INT
@A2 INT

SET @A1=10
WHILE @A1>0
BEGIN
	SELECT @[email protected]
	PRINT @[email protected]
	Set @[email protected]
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

[email protected]@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