declare mycursor cursor local static read_only forward_only for SELECT p.Id,p.parno,pc.ClassName,pv.attr10,pv.attr11,pv.attr4 FROM dbo.Pro_View OPEN mycursor FETCH NEXT from mycursor into WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT from mycursor into @id,@parno,@classname,@attr10,@attr11,@attr4 END CLOSE mycursor
上面红色语句是把所有的数据都取出来当内存中还是在执行
FETCH NEXT from mycursor into 的时候再从数据库中取出来??
应该是根据SQL Server本身的可用内存和CPU负载决定是否一次加到内存。
楼主比较用功,连这个都研究。我不知道,不过瞎说不犯法吧。
假设微软写SQL SERVER的人不是傻子的话,应该不会将所有数据读到内存里面。
你能想象如果TABLE中有1000亿条数据的情况吗?
发现有人先我发言了,回答比较外交口语化,也确实比较智能。
SQL Server 有个设置:每次查询占用的最小内存,默认为 1024KB;
想想如果查找的内容很多,内存放不下了,是不是就不能查找了?
游标中select查询是读一条取一条,虽然比较慢,但是也有他的好处,比如,不会把服务器卡死