游标问题

foreverghost 2004-12-31 04:46:30
请问如何用存储过程的返回值定义游标。
比如有一个存储过程test,它可以返回一个结果集。
现在我想定义一个游标来接收并遍历这个结果集,这样

declare mycursor cursor for exec dbo.test

总是说语法错误。
不知道SQL Server 2000可不可这样做,如果可以的话正确的写法是怎样的?
谢谢大家。。
...全文
152 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
foreverghost 2004-12-31
  • 打赏
  • 举报
回复
谢谢大家,结帖.
631799 2004-12-31
  • 打赏
  • 举报
回复
可以这样:
select 字段 into #t from OPENROWSET('SQLOLEDB',
'SERVER=;uid=sa;pwd=sa;Database=pubs','SET FMTONLY OFF;SET NOCOUNT ON;exec dbo.test) as a

declare mycursor cursor for select 字段 from #t
。。。
。。。
vinsonshen 2004-12-31
  • 打赏
  • 举报
回复
这样吧,先建立个临时表,把存储过程的结果集先存放到该临时表里,再对该临时表游标

create table #test (字段定义列表)


insert #test exec 存储过程

declare mycursor cursor for select 字段名 from #test
...
foreverghost 2004-12-31
  • 打赏
  • 举报
回复
还有没有其他的办法啊?大家帮帮忙。。
子陌红尘 2004-12-31
  • 打赏
  • 举报
回复
不允许这样定义游标


from BOL:
-----------------------------------------------------------------
SQL-92 语法
DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR select_statement
[ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]

Transact-SQL 扩展语法
DECLARE cursor_name CURSOR
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]

SQL-92 参数
cursor_name

是所定义的 Transact-SQL 服务器游标名称。cursor_name 必须遵从标识符规则。有关标识符规则的更多信息,请参见使用标识符。

INSENSITIVE

定义一个游标,以创建将由该游标使用的数据的临时复本。对游标的所有请求都从 tempdb 中的该临时表中得到应答;因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改。使用 SQL-92 语法时,如果省略 INSENSITIVE,(任何用户)对基表提交的删除和更新都反映在后面的提取中。

SCROLL

指定所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)均可用。如果在 SQL-92 DECLARE CURSOR 中未指定 SCROLL,则 NEXT 是唯一支持的提取选项。如果指定 SCROLL,则不能也指定 FAST_FORWARD。

select_statement

是定义游标结果集的标准 SELECT 语句。在游标声明的 select_statement 内不允许使用关键字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO。
xingfuniao 2004-12-31
  • 打赏
  • 举报
回复
看看下面例子,就知道了]
首先創建返回游標的過程
USE pubs
go
CREATE PROCEDURE titles_cursor @titles_cursor CURSOR VARYING OUTPUT
AS
SET @titles_cursor = CURSOR
FORWARD_ONLY STATIC FOR
SELECT *
FROM titles

OPEN @titles_cursor
GO

使用過程返回的游標

USE pubs
GO
DECLARE @MyCursor CURSOR
EXEC titles_cursor @titles_cursor = @MyCursor OUTPUT
WHILE (@@FETCH_STATUS = 0)
BEGIN
FETCH NEXT FROM @MyCursor
END
CLOSE @MyCursor
DEALLOCATE @MyCursor
GO

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧