在网上看了一段存储过程的代码,有几处搞不明白,手上也没有资料,麻烦大家给解释一下
CREATE PROCEDURE mysp_Cursor
    @Result varchar(255) output//声明输出变量
AS
    declare city_cursor cursor for//声明游标变量
    select [ID] from AjaxCityset @Result=''
declare @Field int//声明临时存放CityID的变量
open city_cursor //打开游标
fetch next from city_cursor into @Field//将实际ID赋给变量
while(@@fetch_status=0)//循环开始
begin
       if @Result = ''
           select @Result = convert(nvarchar(2),count(*))  from AjaxCounty where CityID=@Field
       else
           select @Result = @Result + ',' + convert(nvarchar(2),count(*)) from AjaxCounty where CityID=@Field
       
       fetch next from city_cursor into @Field//下一个CityID
end
close city_cursor//关闭游标
deallocate city_cursor//释放游标引用
GO问题1:set @Result=''后面怎么要有个双引号
问题2:@@fetch_status=0 是什么意思

解决方案 »

  1.   

    问题1:set @Result=''后面怎么要有个双引号 
    -- 赋初值,空字符串.
    问题2:@@fetch_status=0 是什么意思
    -- 判断循环条件
      

  2.   

    @@FETCH_STATUS (Transact-SQL)
    返回针对连接当前打开的任何游标发出的上一条游标 FETCH 语句的状态。
    http://msdn.microsoft.com/zh-cn/library/ms187308.aspx
      

  3.   

    0  --> FETCH 语句成功。 
    -1 --> FETCH 语句失败或行不在结果集中。 
    -2 --> 提取的行不存在。 备注 
    由于 @@FETCH_STATUS 对于在一个连接上的所有游标都是全局性的,所以要谨慎使用 @@FETCH_STATUS。在执行一条 FETCH 语句后,必须在对另一游标执行另一 FETCH 语句前测试 @@FETCH_STATUS。在此连接上出现任何提取操作之前,@@FETCH_STATUS 的值没有定义。例如,用户从一个游标执行一条 FETCH 语句,然后调用一个存储过程,此存储过程打开并处理另一个游标的结果。从被调用的存储过程返回控制后,@@FETCH_STATUS 反映的是在存储过程中执行的最后的 FETCH 语句的结果,而不是在存储过程被调用之前的 FETCH 语句的结果。若要检索特定游标的最后提取状态,请查询 sys.dm_exec_cursors 动态管理函数的 fetch_status 列。