只要有关于SQL服务器游标一个非常简单的问题。 如果你声明与所有默认选项光标,它默认为FORWARD_ONLY DYNAMIC
光标? 下面是从MSFT文档片段:
FORWARD_ONLY
指定游标只能从第一滚动到最后一行。 FETCH NEXT是唯一支持的提取选项。 如果没有STATIC,KEYSET或DYNAMIC关键字指定FORWARD_ONLY,光标操作为DYNAMIC光标。 如果没有指定FORWARD_ONLY也不SCROLL,FORWARD_ONLY是默认的 ,除非关键字static,指定了KEYSET,或动态的。 STATIC,KEYSET和DYNAMIC游标默认为滚动。 不同于数据库API,比如ODBC和ADO,FORWARD_ONLY支持与STATIC,KEYSET和DYNAMIC的Transact-SQL游标。
所以,把这些2“加粗”语句组合在一起,是我的假设是正确的?
谢谢
在你引用页面实际上描述了默认的是什么,但它不是很清楚。 如果您允许该作弊答案:
DECLARE c CURSOR FOR SELECT 1;
SELECT properties FROM sys.dm_exec_cursors(@@spid);
在我的系统这会产生TSQL | Snapshot | Read Only | Global (0)
TSQL | Snapshot | Read Only | Global (0)
TSQL | Snapshot | Read Only | Global (0)
在文档sys.dm_exec_cursors介绍如何解码此。 在这种情况下,这是一个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)
TSQL | Dynamic | Optimistic | Global (0)
TSQL | Dynamic | Optimistic | Global (0)
换句话说,一个GLOBAL DYNAMIC OPTIMISTIC
光标。
这个故事的寓意是很可能,你不应该依赖于默认值; 有没有很好的理由,除非出于某种原因,你必须坚持ANSI语法,不指定任何选项。 如果是这样的话,你看这是一个使用游标的数据库无关的代码,这是一个真正可怕的前景确实如此。