在网上看了一段存储过程的代码,有几处搞不明白,手上也没有资料,麻烦大家给解释一下
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 是什么意思
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 是什么意思
-- 赋初值,空字符串.
问题2:@@fetch_status=0 是什么意思
-- 判断循环条件
返回针对连接当前打开的任何游标发出的上一条游标 FETCH 语句的状态。
http://msdn.microsoft.com/zh-cn/library/ms187308.aspx
-1 --> FETCH 语句失败或行不在结果集中。
-2 --> 提取的行不存在。 备注
由于 @@FETCH_STATUS 对于在一个连接上的所有游标都是全局性的,所以要谨慎使用 @@FETCH_STATUS。在执行一条 FETCH 语句后,必须在对另一游标执行另一 FETCH 语句前测试 @@FETCH_STATUS。在此连接上出现任何提取操作之前,@@FETCH_STATUS 的值没有定义。例如,用户从一个游标执行一条 FETCH 语句,然后调用一个存储过程,此存储过程打开并处理另一个游标的结果。从被调用的存储过程返回控制后,@@FETCH_STATUS 反映的是在存储过程中执行的最后的 FETCH 语句的结果,而不是在存储过程被调用之前的 FETCH 语句的结果。若要检索特定游标的最后提取状态,请查询 sys.dm_exec_cursors 动态管理函数的 fetch_status 列。