SQL 关键字 'as' 附近有语法错误。

create proc proc_process_view_class @cno char(7) ,@courseno char(8)
as
begin
declare @strr varchar(max),@str varchar(max)
set @strr='view_class_'+@cno
begin
set @str='if '+@courseno +' in(select distinct '+'课程号'+' from '+'view_course_10100001 )
begin
update '+@strr+'
set '+ @strr+'.成绩=s_c_t2.mark ,'+ @strr+'.班级排名=ROW_NUMBER() over (partition by s_c_t2.cno order by s_c_t2.mark desc) as rownumbers ,
'+@strr+'.课程排名=v1.课程排名
from student s, course c ,S_C_T s_c_t2 ,view_course_'+@courseno+' v1
s.sclassno='+@cno+' and s.sno=s_c_t2.sno and s_c_t2.cno=c.cno and v1.学号=s.sno
end
else
begin
insert into '+@strr+'(学号,姓名,课程号,课程名,成绩,班级排名,课程排名)
select s.sno ,s.sname,c.cno,c.cname,s_c_t2.mark ,
ROW_NUMBER() over (partition by s_c_t2.cno order by s_c_t2.mark desc) as rownumbers ,v1.课程排名
from student s, course c ,S_C_T s_c_t2 ,view_course_'+@courseno+' v1
where s.sclassno='+@cno+' and s.sno=s_c_t2.sno and s_c_t2.cno=c.cno and v1.学号=s.sno
end '
print @str
exec(@str)
end
end

为什么错了 但是 如果在
declare @strr varchar(max),@str varchar(max)
set @strr='view_class_'+@cno
if object_id (@strr, 'U') IS NOT NULL
begin
set @str='if '+@courseno +' in(select distinct '+'课程号'+' from '+'view_course_10100001 )
begin
加上if后 就没有错误 为什么哈 新手请教 只有这么多的分了,麻烦帮一下吧

因为上面代码中下面这个部分有个else,else和if是搭配用的,只有else没有if就会报错的哦
end
else
begin
有问题再追问吧,望采纳。追问

你好 ,上面的代码只给出了一半 空间 有限
就是那个else是放在 str语句中的和str中的if 配对
意思是 如果是不存在执行外层的if 如果存在 就进入str 语句 判断数据是否存在
调试的结果如下
空间不够了

消息 156,级别 15,状态 1,第 5 行
关键字 'as' 附近有语法错误。

追答

上说吧

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-07
存储过程中段有'else',但前面没有'if',当然会报错。
begin和end都是成对出现的,仔细找找begin对应的end,结构就清楚了。
第2个回答  2013-12-07
这样看是看不出来的,你把print的结果拿出来分析一下,哪里拼接错了还是哪里传值不对