存储过程中游标是怎么用的

2024-12-10 00:31:40
推荐回答(2个)
回答1:

ALTER proc [dbo].[存储过程名]
as
begin
declare 游标名字 cursor for select 列名 from 表名 where 条件--先申明游标指向查询出的结果,一列,或者多列都可以,条件自定
declare 变量名 varchar(400)--存储取到的值
open 游标名 --开启游标
while @@FETCH_STATUS=0--取值
begin
fetch next FROM 游标名 into 变量名--这样就将游标指向下一行,得到的第一行值就传给变量了
-------------------------------------------
--需要执行的操作,例如修改某表中的字段
update 表名
set 列名=值
where (修改表中的列)=变量名
-------------------------------------------
end
close 游标名--关闭游标

deallocate 游标名--释放游标
end

回答2:

CREATE PROCEDURE sp_BuildIndexes
AS
DECLARE @TableName sysname,@msg varchar(100),@cmd varchar(100)
DECLARE table_cur CURSOR FOR
SELECT name FROM sysobjects WHERE TYPE='U' --在sysobjects表中'u'表示用户创建的表
OPEN table_cur
FETCH NEXT FROM table_cur INTO @TableName
WHILE @@fetch_status=0
BEGIN
IF @@fetch_status=-2
CONTINUE
SELECT @msg='Building indexes for table'+@TableName+'_'
PRINT @msg
SELECT @cmd='DBCC DBREINDEX('+@TableName+')'
EXEC (@cmd)
PRINT ''
FETCH NEXT FROM table_cur INTO @TableName
END
DEALLOCATE table_cur
GO

EXEC sp_BuildIndexes
EXEC('DBCC DBREINDEX(authors)') --许多 DBCC 语句能够对检测到的问题进行修复。
--重建索引(dbcc dbreindex)