只是有一个关于Server游标的非常快速的问题。如果使用所有默认选项声明游标,它是否默认为FORWARD_ONLY DYNAMIC游标?以下是MSFT文档中的片段:
FORWARD_ONLY 指定光标只能从第一行滚动到最后一行。FETCH NEXT是唯一支持的fetch选项。如果指定了没有静态、密钥集或动态关键字的FORWARD_ONLY,则光标作为动态游标运行。当既没有指定FORWARD_ONLY也没有指定滚动时,FORWARD_ONLY是默认的,除非指定了静态、键集或动态关键字。静态、键集和动态游标默认为滚动。与数据库API(如ODBC和ADO )不同,FORWARD_ONLY支持静态、键集和动态事务SQL游标。
那么,把这两个“粗体”声明放在一起,我的假设正确吗?
谢谢
发布于 2014-12-19 15:09:40
你引用的那页实际上描述的是什么是默认的,但它不是很清楚。如果你允许一个作弊的答案:
DECLARE c CURSOR FOR SELECT 1;
SELECT properties FROM sys.dm_exec_cursors(@@spid);在我的系统中,这会产生TSQL | Snapshot | Read Only | Global (0)。关于游标的文档解释了如何对此进行解码。在本例中,它是一个GLOBAL STATIC READ_ONLY游标。
但是,默认情况取决于游标的用途。这是:
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语法,并且不能指定任何选项,否则没有充分的理由。如果是这样的话,您将看到使用游标的数据库无关代码,这确实是一个可怕的前景。
https://stackoverflow.com/questions/27567633
复制相似问题