游标

--声明游标
declare my_cursor cursor keyset for select * from info
--删除游标资源
deallocate my_cursor

--打开游标,在游标关闭或删除前都有效
open my_cursor
--关闭游标
close my_cursor

--声明局部变量
declare @id int,@name varchar(20),@address varchar(20)
--定位到指定位置的记录
fetch absolute 56488 from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address
--定位到当前记录相对位置记录
fetch relative -88 from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address
--定位到当前记录前一条
fetch prior from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address
--定位到当前记录后一条
fetch next from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address
--定位到首记录
fetch first from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address
--定位到尾记录
fetch last from my_cursor into @id,@name,@address
select @id as id,@name as name,@address as address

 

一个例子:

-- =============================================
-- Create procedure basic template
-- =============================================
-- creating the store procedure
IF EXISTS (SELECT name
    FROM   sysobjects
    WHERE  name = N'chy'
    AND    type = 'P')
    DROP PROCEDURE chy
GO

 

CREATE PROCEDURE chy
AS
     declare @change varchar(30)
     declare @id int
    
     DECLARE curr CURSOR
     for select [id] from a
     open curr
    
     fetch next  from curr into @id
     while(@@fetch_status<>-1)
     begin
          select @change=aa from a where [id]=@id
          set @change=substring(@change,0,3)
        
          update a set
bb=@change where [id]=@id
          fetch next  from curr into @id
     end
     close curr
     DEALLOCATE curr
GO

-- =============================================
-- example to execute the store procedure
-- =============================================
EXECUTE chy
GO

 

你可能感兴趣的:(sql)