首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server游标的默认类型

问Server游标的默认类型
EN

Stack Overflow用户
提问于 2014-12-19 14:00:59
回答 1查看 6.9K关注 0票数 1

只是有一个关于Server游标的非常快速的问题。如果使用所有默认选项声明游标,它是否默认为FORWARD_ONLY DYNAMIC游标?以下是MSFT文档中的片段:

FORWARD_ONLY 指定光标只能从第一行滚动到最后一行。FETCH NEXT是唯一支持的fetch选项。如果指定了没有静态、密钥集或动态关键字的FORWARD_ONLY,则光标作为动态游标运行。当既没有指定FORWARD_ONLY也没有指定滚动时,FORWARD_ONLY是默认的,除非指定了静态、键集或动态关键字。静态、键集和动态游标默认为滚动。与数据库API(如ODBC和ADO )不同,FORWARD_ONLY支持静态、键集和动态事务SQL游标。

那么,把这两个“粗体”声明放在一起,我的假设正确吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-19 15:09:40

你引用的那页实际上描述的是什么是默认的,但它不是很清楚。如果你允许一个作弊的答案:

代码语言:javascript
复制
DECLARE c CURSOR FOR SELECT 1;
SELECT properties FROM sys.dm_exec_cursors(@@spid);

在我的系统中,这会产生TSQL | Snapshot | Read Only | Global (0)。关于游标的文档解释了如何对此进行解码。在本例中,它是一个GLOBAL STATIC READ_ONLY游标。

但是,默认情况取决于游标的用途。这是:

代码语言:javascript
复制
CREATE TABLE #a (a INT);
DECLARE c CURSOR FOR SELECT * FROM #a;
SELECT properties FROM sys.dm_exec_cursors(@@spid);

生成TSQL | Dynamic | Optimistic | Global (0),换句话说,是一个GLOBAL DYNAMIC OPTIMISTIC游标。

这个故事的寓意可能是,您不应该依赖默认值;除非,出于某种原因,您必须坚持ANSI语法,并且不能指定任何选项,否则没有充分的理由。如果是这样的话,您将看到使用游标的数据库无关代码,这确实是一个可怕的前景。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27567633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档