首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

当中有几个不懂的点,烦解答

2013-09-06 
中间有几个不懂的点,烦解答!程序如下:CREATE PROCEDURE lq_confirmASBEGIN--游标申明declare @MyTestCurso

中间有几个不懂的点,烦解答!
程序如下:
CREATE PROCEDURE lq_confirm

AS
BEGIN

--游标申明

declare @MyTestCursor Cursor
declare @KSH char(14)
declare @ZYDH char(2)
declare @YXDH char(4)
declare @JHCGS char(4)
----取出未录取满额专业的专业队列,及差额数
set @MyTestCursor=CURSOR for 
(select yxdh,zydh,jhcgs from t_jhk where lqzt='0' )

open @MyTestCursor
fetch @MyTestCursor into @YXDH,@ZYDH,@JHCGS
while @@FETCH_STATUS=0
begin 

   if object_id('tempdb..#temp_zyk') is not null 
begin
drop table #temp_zyk
end
else 
begin 
print 'not exists' 
    end
--先按成绩排序的考生放到到临时表
    select ksh,zyh,ROW_NUMBER()over (order by tdcj desc,zyh,ksh asc) as zy_sort
    into #temp_zyk
    from t_zyk_new2
    where yxdh=@YXDH  
and zydh=@ZYDH
/* print '*******'  */
print '***以下为院校代号:'+@YXDH+',专业代号:'+@ZYDH+'的录取确认情况***'
--取出排序在计划差额数内且志愿号为最小优先志愿号的考生,录取确认
    update view_zyk_jhk_zxyxzyh set zyzt='1'
 from #temp_zyk
where #temp_zyk.zy_sort <=@JHCGS
and view_zyk_jhk_zxyxzyh.zxyxzyh=#temp_zyk.zyh
and view_zyk_jhk_zxyxzyh.yxdh=@YXDH
and view_zyk_jhk_zxyxzyh.ZYDH=@ZYDH
and view_zyk_jhk_zxyxzyh.ksh=#temp_zyk.KSH
 /*   
select *,ROW_NUMBER()over (order by yxdh,zydh,tdcj desc) as zy_sort
into #temp_zyk
from view_zyk_jhk_zxyxzyh
where yxdh=@YXDH  
and zydh=@ZYDH

select * 
from #temp_zyk
where 
----在临时表中,对排序在专业差额数内的进行录取
 update t_zyk_new2 set zyzt='1'
 from #temp_zyk
 where #temp_zyk.zy_sort <=@JHCGS
 and #temp_zyk.ksh=t_zyk_new2.ksh
 and t_zyk_new2.YXDH=@YXDH
 and t_zyk_new2.ZYDH=@ZYDH
*/ 
fetch @MyTestCursor into @YXDH,@ZYDH,@JHCGS

end
close @MyTestCursor
deallocate @MyTestCursor

END
GO

其中有几个不懂的点:
1:游标MyTestCursor,取一次执行下面的语句一次。那么下面的临时表#temp_zyk
不是每次都被删除了么?前面执行一次,这个表存在不就删除了么?

2:view_zyk_jhk_zxyxzyh这个视图中,我只有这个几个表t_zyk_all,t_zyk_new,t_jhk,t_zxyxzyh
,他是基于这几个表建立的视图么?是那几个表建的视图?

3:能不能告诉我整个程序的流程!

4:能搞清楚一定加分哈。谢谢


[解决办法]
1:游标MyTestCursor,取一次执行下面的语句一次。那么下面的临时表#temp_zyk
不是每次都被删除了么?前面执行一次,这个表存在不就删除了么?
   if object_id('tempdb..#temp_zyk') is not null 
begin
drop table #temp_zyk
end
else 
begin 
print 'not exists' 
end

    select ksh,zyh,ROW_NUMBER()over (order by tdcj desc,zyh,ksh asc) as zy_sort
    into #temp_zyk
    from t_zyk_new2
    where yxdh=@YXDH  and zydh=@ZYDH
这个表#temp_zyk如果已经存在,则删除.然后马上马上重新生成这个表并插入数据



2:view_zyk_jhk_zxyxzyh这个视图中,我只有这个几个表t_zyk_all,t_zyk_new,t_jhk,t_zxyxzyh
,他是基于这几个表建立的视图么?是那几个表建的视图?
从命名来看view_zyk_jhk_zxyxzyh是个视图,但是视图不可以update,上面用了update语句
update view_zyk_jhk_zxyxzyh set zyzt='1'
 from #temp_zyk
where #temp_zyk.zy_sort <=@JHCGS
and view_zyk_jhk_zxyxzyh.zxyxzyh=#temp_zyk.zyh
and view_zyk_jhk_zxyxzyh.yxdh=@YXDH
and view_zyk_jhk_zxyxzyh.ZYDH=@ZYDH
and view_zyk_jhk_zxyxzyh.ksh=#temp_zyk.KSH
这是为什么?你查看一下


3:能不能告诉我整个程序的流程!
大概流程是获取最先优先录取的学生,然后更改它的标识,直到录取满为止


[解决办法]
能不能告诉我这两点是什么意思?
 1: set @MyTestCursor=CURSOR for 
(select yxdh,zydh,jhcgs from t_jhk where lqzt='0' )
是光标从他们开始么?
定义游标读取的数据集合,这个集合是表t_jhk的字段(yxdh,zydh,jhcgs)里的内容组合而的二维数据表
记住,只是定论还没有开始.
open @MyTestCursor-->这一行游标开始读取数据


2:fetch @MyTestCursor into @YXDH,@ZYDH,@JHCGS
这个是什么意思
游标开始读取数据,把yxdh,zydh,jhcgs的值分别放到变量 @YXDH,@ZYDH,@JHCGS中

热点排行