CREATE PROCEDURE ADDSTUDENT
(
@姓名 VARCHAR(50),
@性别 VARCHAR(50),
@专业 VARCHAR(50),
@出生年月 DATETIME,
@课程名 VARCHAR(50),
@所属专业 VARCHAR(50),
@学分 INT,
@Result INT OUTPUT
)
ASBEGINSET @Result =0DECLARE @学号 intDECLARE @课程号 intBEGIN TRAN INSERT_T_ACCEPT SET @Result =1
-- 插入学生表 --
INSERT INTO 学生表
(
姓名,
性别,
专业,
出生年月
)
VALUES
(
@姓名,
@性别,
@专业,
@出生年月
)
set @学号 =@@identityIF @@ERROR <> 0 GOTO E_EXCEPTION -- 插入课程表 --
INSERT INTO 课程表
(
课程名,
所属专业,
学分
)
VALUES
(
@课程名,
@所属专业,
@学分
)
set @课程号 =@@identity
IF @@ERROR <> 0 GOTO E_EXCEPTION -- 选课表 -- INSERT INTO 选课表
(
学号,
课程号
)
VALUES
(
@学号,
@课程号
)
COMMIT IF @@ERROR <> 0 GOTO E_EXCEPTION ELSE GOTO E_SUCESSE_EXCEPTION:
BEGIN
SET @Result = 1
ROLLBACK
ENDE_SUCESS:
begin
SET @Result = 0
end
END
GOdeclare @i INT
set @i =10while (@i>0)
begin declare @姓名 VARCHAR(50),
@性别 VARCHAR(50),
@专业 VARCHAR(50),
@出生年月 DATETIME,
@课程名 VARCHAR(50),
@所属专业 VARCHAR(50),
@学分 INTset @姓名=left(newid(),5) --获得随机字符串
set @性别=left(newid(),5)
set @专业=left(newid(),5)
set @出生年月=getdate() --获得当前时间
set @课程名=left(newid(),5)
set @所属专业=left(newid(),5)
set @学分=cast(ceiling(rand() * 100) as int) --获得随机整数declare @Result int exec ADDSTUDENT
@姓名,
@性别,
@专业,
@出生年月,
@课程名,
@所属专业,
@学分,
@Result outputdeclare @stuNo int, @conNo int select @stuNo= count(*) from 学生表 where 姓名=@姓名 and 性别=@性别 and 专业=@专业select @conNo = count(*) from 课程表 where 课程名=@课程名 and 所属专业=@所属专业 and 学分=@学分print @Result
if(@Result=0 and @stuNo=1 and @stuNo=@conNo)
print 'pass'
else if (@stuNo=1 and @stuNo=@conNo)
print 'pass---存储过程输出参数错误'
else if(@stuNo=1 and @conNo=0)
print 'error 事务没有回滚'
else if(@conNo=1 and @stuNo=0)
print 'error 事务没有回滚'
else if (@stuNo=0 and @stuNo=@conNo)
print 'error 添加失败'set @i=@i-1
end----------------------------pass---------------------------declare @i INT
set @i =10while (@i>0)
begin declare @姓名 VARCHAR(50),
@性别 VARCHAR(50),
@专业 VARCHAR(50),
@出生年月 DATETIME,
@课程名 VARCHAR(50),
@所属专业 VARCHAR(50),
@学分 INTset @姓名=left(newid(),5000000000) --获得随机字符串
set @性别=left(newid(),5)
set @专业=left(newid(),5)
set @出生年月=getdate()--获得当前时间
set @课程名=left(newid(),5)
set @所属专业=left(newid(),5)
set @学分=cast(ceiling(rand() * 100) as int) declare @Result int exec ADDSTUDENT
@姓名,
@性别,
@专业,
@出生年月,
@课程名,
@所属专业,
@学分,
@Result outputdeclare @stuNo int, @conNo intselect @stuNo= count(*) from 学生表 where 姓名=@姓名 and 性别=@性别 and 专业=@专业select @conNo = count(*) from 课程表 where 课程名=@课程名 and 所属专业=@所属专业 and 学分=@学分print @stuNo
if(@Result=1 and @stuNo=0 and @stuNo=@conNo)
print 'pass'
else if(@stuNo=0 and @stuNo=@conNo)
print 'pass---存储过程输出参数错误'
else if(@stuNo=1 and @conNo=0)
print 'error1 事务没有回滚'
else if(@conNo=1 and @stuNo=0)
print 'error2 事务没有回滚'
set @i=@i-1
end
------------------error------------------------------------
(
@姓名 VARCHAR(50),
@性别 VARCHAR(50),
@专业 VARCHAR(50),
@出生年月 DATETIME,
@课程名 VARCHAR(50),
@所属专业 VARCHAR(50),
@学分 INT,
@Result INT OUTPUT
)
ASBEGINSET @Result =0DECLARE @学号 intDECLARE @课程号 intBEGIN TRAN INSERT_T_ACCEPT SET @Result =1
-- 插入学生表 --
INSERT INTO 学生表
(
姓名,
性别,
专业,
出生年月
)
VALUES
(
@姓名,
@性别,
@专业,
@出生年月
)
set @学号 =@@identityIF @@ERROR <> 0 GOTO E_EXCEPTION -- 插入课程表 --
INSERT INTO 课程表
(
课程名,
所属专业,
学分
)
VALUES
(
@课程名,
@所属专业,
@学分
)
set @课程号 =@@identity
IF @@ERROR <> 0 GOTO E_EXCEPTION -- 选课表 -- INSERT INTO 选课表
(
学号,
课程号
)
VALUES
(
@学号,
@课程号
)
COMMIT IF @@ERROR <> 0 GOTO E_EXCEPTION ELSE GOTO E_SUCESSE_EXCEPTION:
BEGIN
SET @Result = 1
ROLLBACK
ENDE_SUCESS:
begin
SET @Result = 0
end
END
GOdeclare @i INT
set @i =10while (@i>0)
begin declare @姓名 VARCHAR(50),
@性别 VARCHAR(50),
@专业 VARCHAR(50),
@出生年月 DATETIME,
@课程名 VARCHAR(50),
@所属专业 VARCHAR(50),
@学分 INTset @姓名=left(newid(),5) --获得随机字符串
set @性别=left(newid(),5)
set @专业=left(newid(),5)
set @出生年月=getdate() --获得当前时间
set @课程名=left(newid(),5)
set @所属专业=left(newid(),5)
set @学分=cast(ceiling(rand() * 100) as int) --获得随机整数declare @Result int exec ADDSTUDENT
@姓名,
@性别,
@专业,
@出生年月,
@课程名,
@所属专业,
@学分,
@Result outputdeclare @stuNo int, @conNo int select @stuNo= count(*) from 学生表 where 姓名=@姓名 and 性别=@性别 and 专业=@专业select @conNo = count(*) from 课程表 where 课程名=@课程名 and 所属专业=@所属专业 and 学分=@学分print @Result
if(@Result=0 and @stuNo=1 and @stuNo=@conNo)
print 'pass'
else if (@stuNo=1 and @stuNo=@conNo)
print 'pass---存储过程输出参数错误'
else if(@stuNo=1 and @conNo=0)
print 'error 事务没有回滚'
else if(@conNo=1 and @stuNo=0)
print 'error 事务没有回滚'
else if (@stuNo=0 and @stuNo=@conNo)
print 'error 添加失败'set @i=@i-1
end----------------------------pass---------------------------declare @i INT
set @i =10while (@i>0)
begin declare @姓名 VARCHAR(50),
@性别 VARCHAR(50),
@专业 VARCHAR(50),
@出生年月 DATETIME,
@课程名 VARCHAR(50),
@所属专业 VARCHAR(50),
@学分 INTset @姓名=left(newid(),5000000000) --获得随机字符串
set @性别=left(newid(),5)
set @专业=left(newid(),5)
set @出生年月=getdate()--获得当前时间
set @课程名=left(newid(),5)
set @所属专业=left(newid(),5)
set @学分=cast(ceiling(rand() * 100) as int) declare @Result int exec ADDSTUDENT
@姓名,
@性别,
@专业,
@出生年月,
@课程名,
@所属专业,
@学分,
@Result outputdeclare @stuNo int, @conNo intselect @stuNo= count(*) from 学生表 where 姓名=@姓名 and 性别=@性别 and 专业=@专业select @conNo = count(*) from 课程表 where 课程名=@课程名 and 所属专业=@所属专业 and 学分=@学分print @stuNo
if(@Result=1 and @stuNo=0 and @stuNo=@conNo)
print 'pass'
else if(@stuNo=0 and @stuNo=@conNo)
print 'pass---存储过程输出参数错误'
else if(@stuNo=1 and @conNo=0)
print 'error1 事务没有回滚'
else if(@conNo=1 and @stuNo=0)
print 'error2 事务没有回滚'
set @i=@i-1
end
------------------error------------------------------------
if(@Result=0 and @stuNo=1 and @stuNo=@conNo)
print 'pass'
else if (@stuNo=1 and @stuNo=@conNo)
print 'pass---存储过程输出参数错误'
else if(@stuNo=1 and @conNo=0)
print 'error 事务没有回滚'
else if(@conNo=1 and @stuNo=0)
print 'error 事务没有回滚'
else if (@stuNo=0 and @stuNo=@conNo)
print 'error 添加失败'还有
if(@Result=1 and @stuNo=0 and @stuNo=@conNo)
print 'pass'
else if(@stuNo=0 and @stuNo=@conNo)
print 'pass---存储过程输出参数错误'
else if(@stuNo=1 and @conNo=0)
print 'error1 事务没有回滚'
else if(@conNo=1 and @stuNo=0)
print 'error2 事务没有回滚'
else if
else
...+ print 语句 利用@变量进行判断 分别输出不同内容
这个代码分成两个部分
第一部分 定义存储过程,用于添加学生数据第二部分 随机初始化一个学生数据,再利用上面定义好的存储过程,添加到表里面通过检查@Result output 变量,看是否执行成功
@result必须是0,
同时还有一个select count 语句,用于检查表中是否真有刚才添加进去的学生数据
以学生姓名,性别,专业为条件
如果确有,那@stdNo必须是1同时,这里还涉及到一个 课程表学生成功添加的时候,会同时在课程表中添加数据其它细节,楼主自己细看吧
而(@stuNo=1 and @stuNo=@conNo)时也pass但存储过程输出参数错误,
既然已经成功了,@Result的值怎么还会等于1