当前位置: 代码迷 >> Sql Server >> 请问SQL Server 2005公用表达式及循环有关问题
  详细解决方案

请问SQL Server 2005公用表达式及循环有关问题

热度:4   发布时间:2016-04-27 18:58:56.0
请教SQL Server 2005公用表达式及循环问题
在SQL   Server   2000中实现循环一般用游标来实现,但游标比较耗资源,所以我想利用一下SQL   Server   2005的新特性,使用公用表达式和while循环来实现
下面的代码在while循环外面select   *   from   TempTable是有返回结果的,但是在循环里面,select   @CorpID=CorpID   from   TempTable   where   [email protected]
这句会提示“对象名     '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   [email protected]
                  --其他操作
set   @[email protected]+1
set   @count   =   @count   -1
print   @CorpID
end

------解决方案--------------------
楼主再去看看CTE的说明, CTE是一个表达式, 不是一个虚拟表或者虚拟视图, 所以它不可能在CTE之外被引用.
而楼主的语句却是在CTE之外引用CTE表达式
  相关解决方案