请教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表达式