sql server存储过程出错

javaadu
博客专家认证
2010-12-02 09:31:27
--编写存储过程完成学生借用教室的功能,如果申请的教室有冲突,请给出提示。
create procedure[borrow_classroom_1]
(@Building_name [Varchar](50),--学生输入的教学楼号
@Classroom_id [Varchar](50),--学生输入的教室号
@Student_id [Varchar](50),--学生的ID
@Date [Datetime](8),--学生输入的教室日期
@Period [Varchar](50),--学生输入的借教室的时段
@Fun [Varchar](50),--学生输入的教室用途
@State [Varchar](50),--在存储过程中使用的变量,判断教室的使用状态
@bID [Varchar](50),--在存储过程中使用的变量,更新表时暂时存放教学楼号
@success [int] = output)--返回值,作为标志借教室是否成功的标志
as
begin
@success=0;
select CM_Classroom_fun into @State
from CM_Classroom ,CM_Building
where CM_Classroom_id=@Classroom_id and CM_Building.CM_Building_id=CM_Classroom.CM_Building_id
and CM_Building.CM_Building_name=@Building_name;
if @State is null then
--如果教室的使用状态为空闲,
--找到与教学楼名称相对应的教学楼编号
select CM_Building_id into @bID from CM_Building where CM_Building_name=@Building_name;
--更新教室表的相应教室的使用状态
update CM_Classroom set CM_Classroom_fun=@Fun where CM_Building_id=@bID
and CM_Classroom_id=@Classroom_id;
--插入一条借用教室的新纪录
Insert into CM_Borrow(CM_Building_id,CM_Classroom_id,CM_Student_id,CM_Borrow_date,
CM_Borrow_period,CM_Borrow_state)
Values(@bID,@Classroom_id,@Student_id,@Date,@Period,1);
--返回结果为true,表示借教室成功
@success = 1;
end if;
end


错误:
消息 102,级别 15,状态 1,过程 borrow_classroom_1,第 14 行
'@success' 附近有语法错误。
消息 102,级别 15,状态 1,过程 borrow_classroom_1,第 15 行
'@State' 附近有语法错误。
消息 156,级别 15,状态 1,过程 borrow_classroom_1,第 19 行
关键字 'then' 附近有语法错误。
消息 102,级别 15,状态 1,过程 borrow_classroom_1,第 22 行
'@bID' 附近有语法错误。
消息 102,级别 15,状态 1,过程 borrow_classroom_1,第 31 行
'@success' 附近有语法错误。
...全文
91 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaadu 2010-12-02
  • 打赏
  • 举报
回复
--编写存储过程完成学生借用教室的功能,如果申请的教室有冲突,请给出提示。
create procedure[borrow_classroom_1]
(@Building_name [Varchar](50),--学生输入的教学楼号
@Classroom_id [Varchar](50),--学生输入的教室号
@Student_id [Varchar](50),--学生的ID
@Date [Datetime],--学生输入的教室日期
@Period [Varchar](50),--学生输入的借教室的时段
@Fun [Varchar](50),--学生输入的教室用途
@State [Varchar](50),--在存储过程中使用的变量,判断教室的使用状态
@bID [Varchar](50),--在存储过程中使用的变量,更新表时暂时存放教学楼号
@success [int] = output)--返回值,作为标志借教室是否成功的标志
as

set @success=0;
select @State = CM_Classroom_fun
from CM_Classroom ,CM_Building
where CM_Classroom_id=@Classroom_id and CM_Building.CM_Building_id=CM_Classroom.CM_Building_id
and CM_Building.CM_Building_name=@Building_name;
if @State = null
--如果教室的使用状态为空闲,
--找到与教学楼名称相对应的教学楼编号
select @bID = CM_Building_id from CM_Building where CM_Building_name=@Building_name;
--更新教室表的相应教室的使用状态
update CM_Classroom set CM_Classroom_fun=@Fun where CM_Building_id=@bID
and CM_Classroom_id=@Classroom_id;
--插入一条借用教室的新纪录
Insert into CM_Borrow(CM_Building_id,CM_Classroom_id,CM_Student_id,CM_Borrow_date,
CM_Borrow_period,CM_Borrow_state)
Values(@bID,@Classroom_id,@Student_id,@Date,@Period,1);
--返回结果为true,表示借教室成功
set @success = 1;

return @success;


成功了!!!!感谢各位
javaadu 2010-12-02
  • 打赏
  • 举报
回复
帅,只剩下最后一个第32行的错误了~~~~~
华夏小卒 2010-12-02
  • 打赏
  • 举报
回复
if @State is null -- then 去掉

end if; -- 这个去掉
华夏小卒 2010-12-02
  • 打赏
  • 举报
回复
--找到与教学楼名称相对应的教学楼编号
select @bID =CM_Building_id from CM_Building where CM_Building_name=@Building_name;
EastonSoft 2010-12-02
  • 打赏
  • 举报
回复
这里你试试
if @State = null
javaadu 2010-12-02
  • 打赏
  • 举报
回复
--编写存储过程完成学生借用教室的功能,如果申请的教室有冲突,请给出提示。
create procedure[borrow_classroom_1]
(@Building_name [Varchar](50),--学生输入的教学楼号
@Classroom_id [Varchar](50),--学生输入的教室号
@Student_id [Varchar](50),--学生的ID
@Date [Datetime](8),--学生输入的教室日期
@Period [Varchar](50),--学生输入的借教室的时段
@Fun [Varchar](50),--学生输入的教室用途
@State [Varchar](50),--在存储过程中使用的变量,判断教室的使用状态
@bID [Varchar](50),--在存储过程中使用的变量,更新表时暂时存放教学楼号
@success [int] = output)--返回值,作为标志借教室是否成功的标志
as
begin
set @success=0;
select CM_Classroom_fun into @State
from CM_Classroom ,CM_Building
where CM_Classroom_id=@Classroom_id and CM_Building.CM_Building_id=CM_Classroom.CM_Building_id
and CM_Building.CM_Building_name=@Building_name;
if @State is null
--如果教室的使用状态为空闲,
--找到与教学楼名称相对应的教学楼编号
select CM_Building_id into @bID from CM_Building where CM_Building_name=@Building_name;
--更新教室表的相应教室的使用状态
update CM_Classroom set CM_Classroom_fun=@Fun where CM_Building_id=@bID
and CM_Classroom_id=@Classroom_id;
--插入一条借用教室的新纪录
Insert into CM_Borrow(CM_Building_id,CM_Classroom_id,CM_Student_id,CM_Borrow_date,
CM_Borrow_period,CM_Borrow_state)
Values(@bID,@Classroom_id,@Student_id,@Date,@Period,1);
--返回结果为true,表示借教室成功
set @success = 1;
end if;
end

改了:还有错。。。。
消息 102,级别 15,状态 1,过程 borrow_classroom_1,第 15 行
'@State' 附近有语法错误。
消息 102,级别 15,状态 1,过程 borrow_classroom_1,第 23 行
'@bID' 附近有语法错误。
消息 102,级别 15,状态 1,过程 borrow_classroom_1,第 34 行
';' 附近有语法错误。


不好意思,我这个用得不熟。。。
EastonSoft 2010-12-02
  • 打赏
  • 举报
回复
SQL SERVER 变量赋值必须加上 Set 或者 Select

消息 102,级别 15,状态 1,过程 borrow_classroom_1,第 14 行
'@success' 附近有语法错误。
你这里就是没加。所以出错
EastonSoft 2010-12-02
  • 打赏
  • 举报
回复
SQL SERVER 里面的if语句是不需要then的,跟Delphi的不一样。

只需要if if @State is null 就行了。
如果后面多条语句记得加上begin end
华夏小卒 2010-12-02
  • 打赏
  • 举报
回复
@success=0;


set @success=0;

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧