请教SQL Server 2005公用表达式及循环问题
在SQL   Server   2000中实现循环一般用游标来实现,但游标比较耗资源,所以我想利用一下SQL   Server   2005的新特性,使用公用表达式和while循环来实现 
 下面的代码在while循环外面select   *   from   TempTable是有返回结果的,但是在循环里面,select   @CorpID=CorpID   from   TempTable   where   row=@i 
 这句会提示“对象名       'TempTable '   无效。”,不知道为什么会这样,难道公用表达式有生命周期?是否有更好的方法实现?望指教!谢谢。   
 declare   @CorpID   char(36) 
 declare   @count   int 
 declare   @i   int 
 set   @i=1   
 with   TempTable   as   (select   CorpID,ROW_NUMBER()   over(order   by   DateUpdate   desc)   as   row   from   Corporation) 
 --select   *   from   TempTable 
 select   @count=count(*)   from   Corporation 
 while   @count> 0 
 begin 
 	select   @CorpID=CorpID   from   TempTable   where   row=@i 
                            --其他操作 
 	set   @i=@i+1 
 	set   @count   =   @count   -1 
 	print   @CorpID 
 end
------解决方案--------------------楼主再去看看CTE的说明, CTE是一个表达式, 不是一个虚拟表或者虚拟视图, 所以它不可能在CTE之外被引用. 
 而楼主的语句却是在CTE之外引用CTE表达式