SqlServer 游标选项说明及测试
来源:互联网 发布:数控车椭圆编程实例 编辑:程序博客网 时间:2024/05/17 08:59
USE [Temp]GO-- 创建测试表CREATE TABLE [dbo].[CURTAB]( [Guid] [uniqueidentifier] NOT NULL, [Name] [varchar](50) NULL, [Value] [numeric](18, 4) NULL, [InsertDate] [datetime] NOT NULL, [Mark] [bit] NULL, CONSTRAINT [PK_CURTAB] PRIMARY KEY CLUSTERED ([Guid] ASC)) ON [PRIMARY]GOALTER TABLE [dbo].[CURTAB] ADD CONSTRAINT [DF_CURTAB_Guid] DEFAULT (newsequentialid()) FOR [Guid]GOALTER TABLE [dbo].[CURTAB] ADD CONSTRAINT [DF_CURTAB_InsertDate] DEFAULT (getdate()) FOR [InsertDate]GOALTER TABLE [dbo].[CURTAB] ADD CONSTRAINT [DF_CURTAB_Mark] DEFAULT (0) FOR [Mark]GO--插入30万行记录SET NOCOUNT ONINSERT INTO [dbo].[CURTAB](Name,value)SELECT 'KK',0GO 300000SET NOCOUNT OFF--全表查询4秒SELECT [Guid],[Name],[Value],[InsertDate],[Mark] FROM [dbo].[CURTAB]
/*游标使用步骤:DECLARE CURSOR 定义 Transact-SQL 服务器游标的属性,例如游标的滚动行为和用于生成游标所操作的结果集的查询。OPEN 语句填充结果集,FETCH 从结果集返回行。CLOSE 语句释放与游标关联的当前结果集。DEALLOCATE 语句释放游标所使用的资源。声明游标语法: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 ] ] ]*/
--测试SET NOCOUNT ONDECLARE @GUID UNIQUEIDENTIFIERDECLARE @NAME VARCHAR(50)DECLARE @VALUE DECIMAL(18,4)DECLARE @InsertDate DATETIMEDECLARE @Mark bitDECLARE MYCUR CURSOR TYPE_WARNING FOR SELECT [Guid],[Name],[Value],[InsertDate],[Mark] FROM [dbo].[CURTAB] -- FOR UPDATE OF [Value]OPEN MYCUR--FETCH FIRST FROM MYCUR INTO @GUID,@NAME,@VALUE,@InsertDate,@MarkFETCH NEXT FROM MYCUR INTO @GUID,@NAME,@VALUE,@InsertDate,@Mark--WAITFOR DELAY '01:00:00' --用于测试 SCROLL_LOCKS 和 OPTIMISTICWHILE @@FETCH_STATUS = 0BEGIN --UPDATE [dbo].[CURTAB] SET [Value]=0 WHERE CURRENT OF MYCUR FETCH NEXT FROM MYCUR INTO @GUID,@NAME,@VALUE,@InsertDate,@MarkENDCLOSE MYCURDEALLOCATE MYCURSET NOCOUNT OFF
官方说明和测试总结:
静态游标较快,滚动游标较慢(测试中,静态游标查询5秒,滚动游标查询9~13秒)
LOCAL :游标的范围对在其中创建它的批处理、存储过程或触发器有效;
GLOBAL:同一个连接会话中,任何存储过程或批处理中,都可以引用该游标名称;
FORWARD_ONLY:静态或动态游标(依情况而定),只进游标,只允许 FETCH NEXT;
SCROLL:滚动游标,允许 FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE 定位游标;
STATIC:静态游标,游标数据从 tempdb 取出(不变);
KEYSET:静态或动态游标(依情况而定),在 tempdb 中生成 keyset 表固定游标行记录和顺序;
DYNAMIC:滚动游标,游标数据从当前表中取出(可变);
FAST_FORWARD:静态游标,只进游标,只允许 FETCH NEXT;
READ_ONLY:静态游标,只读游标,可定义进退;
SCROLL_LOCKS:滚动游标,读入游标时锁定实际表的行记录;
OPTIMISTIC:滚动游标,读入游标时不锁定实际表的行记录;
TYPE_WARNING:游标类型隐式转换为另一种类型时向客户端发出警告(参考:使用隐式游标转换);
FOR UPDATE:定义游标中可更新的列;
DECLARE CURSOR 不指定 READ_ONLY、OPTIMISTIC 或 SCROLL_LOCKS,则默认值如下:
> 如果 SELECT 语句不支持更新(由于权限不够、访问的远程表不支持更新等等),则游标为 READ_ONLY。
> STATIC 和 FAST_FORWARD 游标默认为 READ_ONLY。
> DYNAMIC 和 KEYSET 游标默认为 OPTIMISTIC。
参考:
DECLARE CURSOR (Transact-SQL)
用隐式游标转换
- SqlServer 游标选项说明及测试
- sqlserver游标选项说明
- SQLSERVER游标及循环语句
- SQLSERVER 游标语法及使用说明
- SQLSERVER游标及循环语句
- SQLServer游标(Cursor)简介和使用说明 及全局变量说明和功能
- SQLServer游标(Cursor)简介和使用说明 及全局变量说明和功能
- GCC编译及选项说明
- SQLserver--游标
- sqlserver游标
- SQLServer游标
- SQLSERVER 游标
- 测试分类及说明
- java数据库连接及测试(sqlserver)
- mysqldump参数选项及w参数说明
- vc编译器各选项含义及说明
- SqlServer游标、存储过程及数据块执行
- SqlServer游标、存储过程及数据块执行
- Android判断Service是否运行
- 迷宫图 用 FloodFill 解决
- Linux shell学习笔记
- 首款Unreal Engine 4引擎制作手机游戏曝光
- gcd
- SqlServer 游标选项说明及测试
- Win8 下重装 Chrome 浏览器遇到"糟糕!安装失败。错误代码:0xa0430721。"错误的解决
- 虚幻4引擎可让手机游戏媲美PC游戏画面
- a different object with the same identifier value was already associated with the session
- iOS设置边框、圆角
- Ant——ant的使用
- ACM--Entrophy(哈希+数组 建树)
- 黑马程序员--OC笔记 类
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解