ALTER PROCEDURE [dbo].[userinfor2]
@id int,
@UserID int output
AS
BEGIN
SET NOCOUNT ON;
declare @name varchar(500)
begin try
BEGIN TRAN
declare youbiao cursor for select id from UserInfor where id=@id
declare @getid varchar(400)
open youbiao
begin
fetch next from youbiao into @getid
update UserInfor set name=@getid+'111' where id=@getid
end
close youbiao
deallocate youbiao
COMMIT
end try
BEGIN CATCH
RETURN 222
END CATCH
begin
set @name='dddddd'
end
select @name as name2
return @UserID
END
===============================
官网一个小例子
@@FETCH_STATUS
返回类型
整数
回报值
返回值 | 描述 |
---|---|
0 | FETCH语句成功。 |
-1 | FETCH语句失败或行超出结果集。 |
-2 | 提取的行丢失。 |
-9 | 光标未执行撷取操作。 |
备注
因为@@ FETCH_STATUS对连接上的所有游标是全局的,请仔细使用@@ FETCH_STATUS。执行FETCH语句后,@@ FETCH_STATUS的测试必须在对另一个游标执行任何其他FETCH语句之前进行。在连接发生任何提取之前,@@ FETCH_STATUS的值未定义。
例如,用户从一个游标执行FETCH语句,然后调用存储过程,该过程打开并处理另一个游标的结果。当从调用存储过程返回控制时,@@ FETCH_STATUS反映在存储过程中执行的最后一个FETCH,而不是调用存储过程之前执行的FETCH语句。
要检索特定游标的上次获取状态,请查询sys.dm_exec_cursors动态管理功能的fetch_status列。
例子
以下示例用于@@FETCH_STATUS
控制WHILE
循环中的游标活动。
DECLARE Employee_Cursor CURSOR FOR SELECT BusinessEntityID, JobTitle FROM AdventureWorks2012.HumanResources.Employee;
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
游标一般格式:
DECLARE 游标名称 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
OPEN 游标名称
FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
WHILE @@FETCH_STATUS=0
BEGIN
SQL语句执行过程... ...
FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
END
CLOSE 游标名称
DEALLOCATE 游标名称 (删除游标)