[提问]一个存储过程不明白

xupeihuagudulei 2009-09-28 11:20:40

alter proc usp_GetCrossScore4(
@StuName varchar(10)
)
as

create table @ScoreTbl(
ScoreId int,
SubjectName varchar(50),
StudentName varchar(10),
ScoreValue real,
ExamDate datetime,
AvgFlag bit DEFAULT(0)
)

insert into #ScoreTbl
(ScoreId,SubjectName,StudentName,ScoreValue,ExamDate)
select ScoreId,SubjectName,StudentName,ScoreValue,ExamDate from t_Score s where s.StudentName=@StuName
insert into #ScoreTbl(ScoreId,SubjectName,StudentName,ScoreValue,ExamDate,AvgFlag)

select null,SubjectName,StudentName,avg(ScoerValue),null,1 from #ScoreTbl s group by SubjectName,StudentName

declare @sql varchar(8000)

set @sql='select SubjectName 科目'
select @sql=@sql+'SUM(CASE ExamDate when'''+convert(varchar(20),ExamDate,102)+'''then SocreValue Else null end )'''+cast(year(ExamDate)as varchar)+'年'+cast(month(ExamDate)as varchar)+'月'
+cast(day(ExamDate)as varchar)+'日'''
from (select distinct ExamDate from t_Score s where s.StudentName=@StuName)ss
set @sql=@sql+',sum(case AvgFlag when 1 then ScoreValue else null end)''平均分'''


exec(@sql+'from @ScoreTbl s group by Subjectname')


这是我在cnblogs里面看到的。
很不明白
首先他前面没有创建过存储过程

直接就alter

我怀疑是打错原因。
把alter 改成create 但是会报错
提示@ScoreTbl 附近有语法错误。
首先我认为创建存储过程有参数也不应该放括号里面啊?
alter proc usp_GetCrossScore4(
@StuName varchar(10)
)

原文这里。http://www.cnblogs.com/Jinglecat/archive/2007/05/23/756427.html
大大们帮忙看看。
或者说帮我能让这个存储过程运行起来,
改下下。菜鸟谢啦
...全文
71 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
7761098 2009-09-28
  • 打赏
  • 举报
回复
局部临时表运行时放在tempdb,但是运行存储过程结束后已经释放了
如果要看到的话最好在存储过程外部创建
xupeihuagudulei 2009-09-28
  • 打赏
  • 举报
回复
顺便再问下临时表放哪个数据库中?
tempdb?
里面找了下没有。
当前数据库里也没有。

在哪呢

原来记得哪里找到过
7761098 2009-09-28
  • 打赏
  • 举报
回复
@ScoreTbl
改作#ScoreTbl,
本意应该是创建临时表而不是表变量,根据下面的insert语句
xuejie09242 2009-09-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 js_szy 的回复:]
create table @ScoreTbl(

还可以这样的啊?
应该是declare @ScoreTbl table()
这个吧
[/Quote]
表变量用声明,不用创建的。
xupeihuagudulei 2009-09-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 js_szy 的回复:]
create table @ScoreTbl(

还可以这样的啊?
应该是declare @ScoreTbl table()
这个吧
[/Quote]呵呵,试试。
华夏小卒 2009-09-28
  • 打赏
  • 举报
回复
create table @ScoreTbl(

还可以这样的啊?
应该是declare @ScoreTbl table()
这个吧
xupeihuagudulei 2009-09-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 js_szy 的回复:]
bd
[/Quote]回答正题。。
xupeihuagudulei 2009-09-28
  • 打赏
  • 举报
回复
那就是在存储过程里不能创建表喽?
--小F-- 2009-09-28
  • 打赏
  • 举报
回复
参数放括号里面是正确的
CREATE PROCEDURE CS#
(
@Input varchar(8000)
)
AS
这样的格式正确
华夏小卒 2009-09-28
  • 打赏
  • 举报
回复
bd
xupeihuagudulei 2009-09-28
  • 打赏
  • 举报
回复
SF不留

34,588

社区成员

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

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