【ERROR】EXECUTE 後的事務計數指示 BEGIN 和 COMMIT 語句的數目不匹配。上一計數 = 0,當前計數 = 1。

在這裏插入圖片描述

/*建立新表SC_Avg,記錄任意一門課的平均成績*/
DROP TABLE IF EXISTS SC_Avg;
CREATE TABLE SC_Avg
(
Cno CHAR(4),
Cname CHAR(10),
Avg_Score FLOAT 
)
INSERT INTO SC_Avg VALUES('1','高等數學',0)
INSERT INTO SC_Avg VALUES('2','計算機基礎',0)
INSERT INTO SC_Avg VALUES('3','離散數學',0)
SELECT * FROM SC_Avg
/*建立存儲過程*/
IF(exists(select * from sys.objects where name='Proc_TRANSFER1'))
	DROP PROCEDURE Proc_TRANSFER1
GO
CREATE PROCEDURE Proc_TRANSFER1
AS
BEGIN TRANSACTION TRANS
	DECLARE /*定義變量*/
	@Avg1 FLOAT,
	@Avg2 FLOAT,
	@Avg3 FLOAT;
	
	SELECT @Avg1=AVG(Grade)
	FROM SC
	WHERE Cno ='1'
	UPDATE SC_Avg SET Avg_Score=@Avg1 WHERE Cno ='1'

	SELECT @Avg2=AVG(Grade)
	FROM SC
	WHERE Cno ='2'
	UPDATE SC_Avg SET Avg_Score=@Avg2 WHERE Cno ='2'

	SELECT @Avg3=AVG(Grade)
	FROM SC
	WHERE Cno ='3'
	UPDATE SC_Avg SET Avg_Score=@Avg3 WHERE Cno ='3'
	

EXEC Proc_TRANSFER1

SELECT * FROM SC_Avg

原因在於BEGIN和COMMIT的語句數目不匹配
這時候,需要加上一句

COMMIT TRANSACTION TRANS

使程序修改爲

/*建立新表SC_Avg,記錄任意一門課的平均成績*/
DROP TABLE IF EXISTS SC_Avg;
CREATE TABLE SC_Avg
(
Cno CHAR(4),
Cname CHAR(10),
Avg_Score FLOAT 
)
INSERT INTO SC_Avg VALUES('1','高等數學',0)
INSERT INTO SC_Avg VALUES('2','計算機基礎',0)
INSERT INTO SC_Avg VALUES('3','離散數學',0)
SELECT * FROM SC_Avg
/*建立存儲過程*/
IF(exists(select * from sys.objects where name='Proc_TRANSFER1'))
	DROP PROCEDURE Proc_TRANSFER1
GO
CREATE PROCEDURE Proc_TRANSFER1
AS
BEGIN TRANSACTION TRANS
	DECLARE /*定義變量*/
	@Avg1 FLOAT,
	@Avg2 FLOAT,
	@Avg3 FLOAT;
	
	SELECT @Avg1=AVG(Grade)
	FROM SC
	WHERE Cno ='1'
	UPDATE SC_Avg SET Avg_Score=@Avg1 WHERE Cno ='1'

	SELECT @Avg2=AVG(Grade)
	FROM SC
	WHERE Cno ='2'
	UPDATE SC_Avg SET Avg_Score=@Avg2 WHERE Cno ='2'

	SELECT @Avg3=AVG(Grade)
	FROM SC
	WHERE Cno ='3'
	UPDATE SC_Avg SET Avg_Score=@Avg3 WHERE Cno ='3'
	COMMIT TRANSACTION TRANS

EXEC Proc_TRANSFER1

SELECT * FROM SC_Avg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章