sqlserver临时表或表变量代替游标
在很多场合,用临时表或表变量也可以替代游标
临时表用在表没有标识列(int)的情况下.
在表有标识列(int)的情况下可以用表变量,当然也可以用临时表.
利用临时表或表变量的原因时,生成一个连续的列
对于临时表是使用
SELECT .... ,IDENTITY(int) NewID INTO #tmp SELECT ... FROM YourTable
对于YourTable含有标识列(比如字段名为ID)时,可以
INSERT @tmpTable
SELECT ..., NewID=(SELECT COUNT(*) FROM YourTable b WHERE b.id<=a.id) FROM YourTable a
当然,也可以不写入表变量而使用子查询.
当有了从 1--你的记录数连续的NewID时, 你就可以用循环来操作每一条记录了.
这个NewID你就可以当它是指针标识.
DECLARE @i INT,@cnt INT
SET @i=1
SELECT @cnt=COUNT(*) FROM YourTable
WHILE @i<@cnt
BEGIN
SELECT
.... FROM #tmp(或@tmpTable依上面情况不同) WHERE NewID=@i
...
SET
@i=@i+1
END
DROP TABLE...
代码举例:
CREATE PROCEDURE get_zb_count_3 @J_JID varchar(50), AS declare @Kh_ID varchar(50)-----存放考核子指标值 create table #KhStyle(IntID int identity(1,1), StyleID varchar(50)) ---创建临时表 insert into #KhStyle(StyleID) select K_ID from T_Kaoh where J_JID=@J_JID and K_FID=@K_ID --------把查询的子指标记录插入到临时表 select @count = count(1) from #KhStyle ---查询当前临时表的子指标记录 if (@count>0) set @total = 0 ---累计初始化 while (@i <= @count) -------开始循环 select @zb_count=count(*) from v_kh_jg where J_ID=@J_JID and K_ID=@Kh_ID and S_Area in (select * if @zb_count = 0 select @total= @zb_count +@total ---累计 select @i = @i +1 --循环递增 set @zb_count=@total set @zb_count=0 drop table #KhStyle---删除临时表 |
说明:我这里用到了临时表的功能,通过这个存储过程至少能学到三点知识
1、变量是如何定义的
以下为程序代码:
declare @intID int declare @varname varchar(100) |
2、临时表的使用
以下为程序代码:
Create Table #StyleTab(intID int identity(1,1),StyleID varchar(50))----创建临时表 请注意格式:#表名(字段名称 类型,字段名称 类型) 比较有用的一个字段就是自动增长的标识性字段的定义 intID int identity(1,1) Drop Table #StyleTab----删除临时表 |
3、循环的用法
以下为程序代码:
一般i通常作为变量
while(i<=5)
begin
-----代码
end
sqlserver临时表或表变量代替游标的更多相关文章
- sqlserver 临时表、表变量、CTE的比较
原文地址: sqlserver 临时表.表变量.CTE的比较 1.临时表 1.1 临时表包括:以#开头的局部临时表,以##开头的全局临时表. 1.2 存储 不管是局部临时表,还是全局临时表,都会放存 ...
- SqlServer 临时表、表变量、函数 替代游标
http://www.cnblogs.com/chongzi/archive/2011/01/19/1939106.html 临时表 存放在tempdb中 --存储过程中将多表连接结果写入到临时表中, ...
- SqlServer 临时表 与 表变量(转)
1. 表变量 变量都以@或@@为前缀,表变量是变量的一种,另外一种变量被称为标量(可以理解为标准变量,就是标准数据类型的变量,例如整型int或者日期型DateTime).以@前缀的表变量是本地的,因此 ...
- 转:sqlserver 临时表、表变量、CTE的比较
1.临时表 1.1 临时表包括:以#开头的局部临时表,以##开头的全局临时表. 1.2 存储 不管是局部临时表,还是全局临时表,都会放存在tempdb数据库中. 1.3 作用域 局部临时表:对当前连接 ...
- SQL 临时表或表变量替代游标
1.如果表没有自动增长的标识列(int) 使用临时表 SELECT IDENTITY(int) NewID ,.. INTO #tmp FROM YouTable 2.表有标识列 使用表变量 INSE ...
- SQL 临时表或表变量替代游标(转)
1.如果表没有自动增长的标识列(int) 使用临时表 SELECT IDENTITY(int) NewID ,.. INTO #tmp FROM YouTable 2.表有标识列 使用表变量 INSE ...
- SQLServer中临时表与表变量的区别分析(转)
在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永 ...
- SQLServer中临时表与表变量的区别分析
临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Server的系统日志 ...
- SQLServer中临时表与表变量的区别分析【转】
在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永 ...
随机推荐
- MS SQL Server2000转换成MySQL
按计划今天着手进行将后台数据库从MS SQL Server2000转换成MySQL5.1.3.目的是便于发布软件的测试版本. 1. 驱动: mysql-connector-odbc-5.1.11-wi ...
- HDU - 6166:Senior Pan(顶点集合最短路&二进制分组)
Senior Pan fails in his discrete math exam again. So he asks Master ZKC to give him graph theory pro ...
- Java JDK安装和配置(Windows)
安装和配置JDK JDK中自带了JRE,不需要单独下载, 打开JDK安装, 选择安装目录,下一步,装完JDK,会问是否安装JRE,选下一步, 最后还会问是否安装Java FX, 装完后就全部完成了JD ...
- win键盘映射成mac键盘
在win7系统下安装了mac虚拟机,mac的快捷键与win的键盘不一样,所以ctrl+c,ctrl+v都用不了,于是找方法映射. 搜索到 keyremap4macbook,,进到官网Karabiner ...
- 在actionbar中加入item的方法
首先在menu文件夹中创建post.xml <?xml version="1.0" encoding="utf-8"?> <menu xmln ...
- php 权限 管理
权限的思考: https://www.jianshu.com/p/cf9077a7d38a 权限例子,用户 角色 功能 用户角色关联表 角色功能关联表 http://www.cnblogs.com/n ...
- java一位数组求平均值,小数
package com.c2; //注意数据类型,float public class Col {// public static void main(String[] args) { float m ...
- 漫谈JVM之类加载机制(篇一)
前言 最近在看一本书,发现代码里用到了Thread.currentThread().getContextClassLoader(),为什么类加载器还与线程有关系呢,为什么不直接使用ClassLoade ...
- Train-Alypay-Cloud:蚂蚁金融云知识点
ylbtech-Train-Alypay-Cloud:蚂蚁金融云知识点 1.返回顶部 1. 1.数据库与缓存结合使用https://www.cloud.alipay.com/docs/2/47337 ...
- mysql replication /mysql 主从复制原理
一下内容均是根据leader的培训分享整理而成 ************************************我是分割线*********************************** ...