游标

在游标逐行处理过程中,当需要处理的记录数较大,而且游标处理位于数据库事务内时,速度非常慢。

-- 声明变量
DECLARE @Id AS Int
-- 声明游标
DECLARE C_Id CURSOR FAST_FORWARD READ_ONLY FOR
SELECT b.Id FROM dbo.Books b;
-- 打开游标
OPEN C_Id; -- 取第一条记录
FETCH NEXT FROM C_Id INTO @Id;
WHILE @@FETCH_STATUS = 0
BEGIN
--逻辑处理
SELECT * FROM dbo.Books WHERE Id = @Id;
-- 取下一条记录
FETCH NEXT FROM C_Id INTO @Id;
END;
-- 关闭游标
CLOSE C_Id;
-- 释放游标
DEALLOCATE C_Id;

临时表

-- 创建临时表
IF OBJECT_ID('tempdb.dbo.#tempBooks','U') IS NOT NULL DROP TABLE dbo.#tempBooks;
GO SELECT Id
INTO dbo.#tempBooks
FROM dbo.Books b DECLARE
@Id Int WHILE EXISTS(SELECT Id FROM dbo.#tempBooks)
BEGIN
-- 也可以使用top 1
SET ROWCOUNT 1 --逻辑处理
SELECT @Id=Id FROM dbo.#tempBooks;
SELECT * FROM dbo.Books WHERE Id = @Id; SET ROWCOUNT 0
-- 删除临时表
DELETE FROM dbo.#tempBooks WHERE Id=@Id;
END
DECLARE @intMinId INT ,
@intMaxId INT; SELECT RowID = IDENTITY( INT,1,1)--使用identity(int,1,1)来产生行号,必须把数据插入到一张表中。
INTO #templist
FROM dbo.Books; SELECT @intMinId = MIN(RowID) ,
@intMaxId = MAX(RowID)
FROM dbo.#templist; WHILE @intMinId <= @intMaxId
BEGIN
PRINT @intMinId;
SET @intMinId = @intMinId + 1;
END;
DROP TABLE dbo.#templist;

表变量

-- 声明表变量
DECLARE @tempBooks TABLE
(
Id Int
); -- 将源表中的数据插入到表变量中
INSERT INTO @tempBooks(Id)
SELECT Id FROM dbo.Books
-- 声明变量
DECLARE
@Id Int WHILE EXISTS(SELECT Id FROM @tempBooks)
BEGIN
-- 也可以使用top 1
SET ROWCOUNT 1 --逻辑处理
SELECT @Id = Id FROM @tempBooks;
SELECT * FROM dbo.Books WHERE Id = @Id; SET ROWCOUNT 0 DELETE FROM @tempBooks WHERE Id = @Id;
END

来源:https://www.cnblogs.com/cnki/p/10349684.html

sql循环-游标、临时表、表变量的更多相关文章

  1. SQL Server循环——游标、表变量、临时表

    游标 在游标逐行处理过程中,当需要处理的记录数较大,而且游标处理位于数据库事务内时,速度非常慢. -- 声明变量 DECLARE @Id AS Int -- 声明游标 DECLARE C_Id CUR ...

  2. sqlserver 表循环-游标、表变量、临时表

    SQL Server遍历表的几种方法 阅读目录 使用游标 使用表变量 使用临时表 在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易 ...

  3. SQL Server 2014,表变量上的非聚集索引

    从Paul White的推特上看到,在SQL Server 2014里,对于表变量(Table Variables),它是支持非唯一聚集索引(Non-Unique Clustered Indexes) ...

  4. SQL循环+游标

    /****** Script for SelectTopNRows command from SSMS  ******/use DB  declare @id bigint   DECLARE cur ...

  5. Sql Server RowNumber和表变量分页性能优化小计

    直接让代码了,对比看看就了解了 当然,这种情况比较适合提取字段较多的情况,要酌情而定 性能较差的: WITH #temp AS                       (              ...

  6. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  7. SQL Server 表变量和临时表的区别

    SQL Server 表变量和临时表的区别 一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束,唯 ...

  8. SQL 表变量和临时表

    SQL 表变量和临时表 表变量:存储在内存中,作用域是脚本的执行过程中,脚本执行完毕之后就会释放内存,适合短时间内存储数据量小的数据集. 优点:使用灵活,使用完之后立即释放,不占用物理存储空间 缺点: ...

  9. SQL Server中的临时表和表变量 Declare @Tablename Table

    在SQL Server的性能调优中,有一个不可比面的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集?表变量和临时表是两种选择.记得在给一家国内首屈一指的海运公司作SQL Se ...

随机推荐

  1. Python将多个excel表格合并为一个表格

    Python将多个excel表格合并为一个表格 生活中经常会碰到多个excel表格汇总成一个表格的情况,比如你发放了一份表格让班级所有同学填写,而你负责将大家的结果合并成一个.诸如此类的问题有很多.除 ...

  2. Vue的基础学习

    一.Vue的计算属性:get和set属性 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  3. CockroachDB学习笔记——[译]如何优化Go语言中的垃圾回收

    原文链接:https://www.cockroachlabs.com/blog/how-to-optimize-garbage-collection-in-go/ 原作者:Jessica Edward ...

  4. HOSTS大法解决Github Clone太慢

    经常要clone github中的一些项目,无奈如果不爬梯子的话速度实在是龟速,经常1k/s,于是搜了下解决方法,改HOSTS大法. Windows下在C:/Windows/system32/driv ...

  5. iOS-自定义导航控制器

    BasicNavigationViewController:UINavigationViwController /* 隐藏导航底部线条 */ -(void)viewDidLoad{    [super ...

  6. HelloCube:ForEach

    此示例演示了一个简单的ECS系统,它可以旋转一对立方体. 它显示了什么? 此示例演示了ECS中数据和功能的分离.数据存储在组件中,如下RadiansPerSecond属性存储在RotationSpee ...

  7. 《精通并发与Netty》学习笔记(11 - 详解NIO (二) 分散/聚集 Scatter/Gather、Selector)

    一.分散/聚集 Scatter/Gather scatter/gather指的在多个缓冲区上实现一个简单的I/O操作,比如从通道中读取数据到多个缓冲区,或从多个缓冲区中写入数据到通道:scatter( ...

  8. matplotlib画图总结--多子图布局

    1.subplot布局 subplot(nrows, ncols, index, **kwargs) subplot(pos, **kwargs) subplot(ax) x=[1,2,3] valu ...

  9. 小程序php支付,前后端分离

    小程序端: xml: <button type="default" bindtap="payOrder">支付</button> js: ...

  10. 测试sigaction重启动标识

    #include <stdio.h>#include <unistd.h>#include <signal.h>#include <string.h># ...