create proc questionanswer @level int,@uno char(5) as begin declare @temp table(qno char(3)) insert into @temp exec levelchoose @level update Question set qcnt=qcnt+1 where qno in (select qno from @temp) declare @tno char(7) if not exists(select * from Testrecord) begin insert into Testrecord values('0000001',@uno,getdate(),0) end else begin select @tno=max(tno)+1 from Testrecord insert into Testrecord values(@tno,@uno,getdate(),0) end -- 添加以下SELECT语句来返回结果集 select qno from @temp end 为什么不能对表进行修改
时间: 2024-03-23 09:43:56 浏览: 83
这段代码中出现了错误是因为在存储过程中的SELECT语句只返回了结果集,但并没有返回任何修改操作。在存储过程中,如果要对表进行修改,需要使用EXECUTE语句来执行相应的修改操作。
例如,如果要执行UPDATE操作,则需要将UPDATE语句放在EXECUTE语句中,如下所示:
```
EXECUTE ('UPDATE Question SET qcnt=qcnt+1 WHERE qno IN (SELECT qno FROM @temp)')
```
同样,如果要执行INSERT操作,则需要将INSERT语句放在EXECUTE语句中,如下所示:
```
EXECUTE ('INSERT INTO Testrecord VALUES (''0000001'',@uno,GETDATE(),0)')
```
需要注意的是,在EXECUTE语句中,字符串需要使用两个单引号来表示。
相关问题
create proc usp_InsertUserInfor @UserName varchar(20),@UserPwd varchar(40),@UserIdentity int,@IsDel bit = 0 as insert into UserInfor values(@UserName,@UserPwd,@UserIdentity,@IsDel)
这是一个存储过程的代码,用于向 UserInfor 表中插入用户信息。其中 @UserName 是用户名,@UserPwd 是用户密码,@UserIdentity 是用户身份,@IsDel 是是否删除的标志位。如果 @IsDel 未指定,则默认为 0。
create proc Avg_1 @cname char(30),@avg int output as select @avg=avg(grade) from grade where CourseName=@cname go
这段代码创建了一个名为Avg_1的存储过程。该存储过程接受两个输入参数:@cname和@avg。@cname用于指定要查询的课程名,@avg用于存储查询结果。存储过程内部使用SELECT语句查询指定课程的平均成绩,并将结果存储在@avg变量中。最后,使用GO语句结束存储过程的定义。
可以通过以下代码执行该存储过程:
```sql
DECLARE @avg INT;
EXEC Avg_1 'Math', @avg OUTPUT;
SELECT @avg;
```
该代码将查询Math课程的平均成绩,并将结果存储在@avg变量中。最后,使用SELECT语句将查询结果输出到客户端。
阅读全文