在這裏做個備份
/*AutoInitProc
*
* Create for autoInit
* by vigor 2005.2.14
*
*/
USE chargeDB
/********創建視圖******************************************************************/
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'StudentView_clas' AND type = 'V')
DROP VIEW StudentView_clas
GO
CREATE VIEW StudentView_clas
AS
SELECT stud_id,stud_class,stud_clasflag FROM studentInfo
/**************************************************************************************/
GO
/********創建過程******************************************************************/
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AutoInitProc' AND type = 'P')
DROP PROCEDURE AutoInitProc
GO
CREATE PROCEDURE AutoInitProc
@operatorId char(3), --傳遞進來的操作員代號
@total int OUTPUT, --傳遞出去的進度總數(用於進度顯示)
@current int OUTPUT --傳遞出去的當前進度(用於進度顯示)
AS
BEGIN --過程開始
DECLARE @tari_id char(20),@tari_feeid char(8),@tari_feename char(20),@tari_payable char(4);
DECLARE @stud_id char(15),@stud_class char(20),@stud_clsflag char(1);
DECLARE @STEPCOUNTER int;
SET NOCOUNT ON
BEGIN TRANSACTION --開始事務
SELECT COUNT(*) FROM Tariff1Info GROUP BY Tari_classid
SET @total=@@ROWCOUNT --返回總進度(即Tariff1Info中的班級個數)
SET @current=0;
DECLARE Tari_Cur SCROLL CURSOR --聲明外部遊標
FOR
SELECT tari_classid FROM Tariff1Info ORDER BY tari_classid;
OPEN Tari_Cur; --打開外部遊標
FETCH NEXT FROM Tari_Cur INTO @tari_id;
SELECT @STEPCOUNTER=COUNT(Tari_classid) FROM Tariff1Info WHERE Tari_classid=@tari_id;--統計當前(@tari_id)的數量,減少篩選次數
WHILE @@FETCH_STATUS=0
BEGIN
DECLARE Stud_Cur SCROLL CURSOR --聲明內部遊標
FOR
SELECT * FROM StudentView_clas WHERE stud_class=@tari_Id;
OPEN Stud_Cur; --打開內部遊標
FETCH NEXT FROM Stud_Cur INTO @stud_id, @stud_class, @stud_clsflag;
WHILE @@FETCH_STATUS=0
BEGIN
IF @stud_clsflag=1
BEGIN
DECLARE Temp_Cur SCROLL CURSOR --聲明零時遊標
FOR
SELECT * FROM Tariff1Info WHERE tari_classid=@tari_Id;
OPEN Temp_Cur; --打開零時遊標
FETCH NEXT FROM Temp_Cur INTO @tari_id,@tari_feeid,@tari_feename,@tari_payable;
WHILE @@FETCH_STATUS=0
BEGIN
IF EXISTS(SELECT * FROM TempPayable WHERE tepa_studid=@stud_id AND tepa_feeid=@tari_feeid)
PRINT '此項已經初始';
ELSE
INSERT TempPayable VALUES(@stud_id,@tari_feeid,@tari_feename,@tari_payable,GetDate(),@operatorId);
FETCH NEXT FROM Temp_Cur INTO @tari_id,@tari_feeid,@tari_feename,@tari_payable;
END;
CLOSE Temp_Cur; --關閉零時遊標
DEALLOCATE Temp_Cur; --釋放零時遊標
END
ELSE
PRINT '此學生不參加班級自動初始';
FETCH NEXT FROM Stud_Cur INTO @stud_id, @stud_class, @stud_clsflag;
END
CLOSE Stud_Cur; --關閉內部遊標
DEALLOCATE Stud_Cur; --釋放內部遊標
FETCH RELATIVE @STEPCOUNTER FROM Tari_Cur INTO @tari_id;--向後取@STEPCOUNTER的記錄
SET @current=@current+1;
SELECT @STEPCOUNTER=COUNT(Tari_classid) FROM Tariff1Info WHERE Tari_classid=@tari_id;--統計當前(@tari_id)的數量,減少篩選次數
END;
CLOSE Tari_Cur; --關閉外部遊標
DEALLOCATE Tari_Cur; --釋放外部遊標
COMMIT TRANSACTION; --提交事務
END;--過程結束
---測試------
GO
DECLARE @TOTAL INT,@CURRENT INT;
EXEC AutoInitProc 028,@TOTAL OUTPUT,@CURRENT OUTPUT
PRINT @TOTAL
PRINT @CURRENT