步骤:

1:先定义一个临时表,把需要用的数据放入临时表中,如果数据不连续,则在临时表中定义一个自增长键

DECLARE @temp table(
Id INT IDENTITY(1, 1) ,
ShopCode UNIQUEIDENTIFIER,
CustCode UNIQUEIDENTIFIER,
CardMoney DECIMAL,
CardGiftMoney DECIMAL,
CreateTime DATETIME
)
INSERT INTO @temp 
select ShopCode,CustCode,CardMoney,CardGiftMoney,CreateTime from HL11.dbo.t_ShopSerLog 
where CreateTime>='2017-07-01' and CreateTime<'2017-07-02' and [Status]=1 and DeleFlag=1 
and ShopCode
in
(
'EE034CB5-EF4B-4E5B-928D-2D3F733D5B4A',
'667557E2-D5A9-43FE-A18A-21DD68E19207'
)
and (CardGiftMoney>0 or CardMoney>0)

2:定义两个int类型的字段,一个用于判断当前运行的行数,一个用于存放临时表中需要遍历的总行数

DECLARE @rowcount INT 
DECLARE @allcount INT 
SET @rowcount=1
SET @allcount=(select COUNT(1) from HL11.dbo.t_ShopSerLog 
where CreateTime>='2017-07-01' and CreateTime<'2017-07-02' and [Status]=1 and DeleFlag=1 
and ShopCode
in
(
'EE034CB5-EF4B-4E5B-928D-2D3F733D5B4A',
'667557E2-D5A9-43FE-A18A-21DD68E19207'
)
and (CardGiftMoney>0 or CardMoney>0))

3:根据自增长键以及2里面定义的两个字段,对数据进行遍历处理

DECLARE @Id INT 
DECLARE @ShopCode UNIQUEIDENTIFIER
DECLARE @CustCode UNIQUEIDENTIFIER
DECLARE @CardMoney DECIMAL
DECLARE @CardGiftMoney DECIMAL
DECLARE @CreateTime DATETIME
SET @Id=1
WHILE(@rowcount<=@allcount)
BEGIN 
select TOP 1 @ShopCode=ShopCode,@CustCode=CustCode,@CardMoney=CardMoney,@CardGiftMoney=CardGiftMoney,@CreateTime=CreateTime from @temp where Id=@Id

update HL10.dbo.t_CustVCard set PaidAmount=PaidAmount-@CardMoney,GiftAmount=GiftAmount-@CardGiftMoney,
LastUsedTime=@CreateTime where ShopCode=@ShopCode and CustUniqCode=@CustCode

SET @Id=@Id+1
SET @rowcount=@rowcount+1

END

4:总的代码如下

DECLARE @temp table(
Id INT IDENTITY(1, 1) ,
ShopCode UNIQUEIDENTIFIER,
CustCode UNIQUEIDENTIFIER,
CardMoney DECIMAL,
CardGiftMoney DECIMAL,
CreateTime DATETIME
)
INSERT INTO @temp
select ShopCode,CustCode,CardMoney,CardGiftMoney,CreateTime from HL11.dbo.t_ShopSerLog
where CreateTime>='2017-07-01' and CreateTime<'2017-07-02' and [Status]=1 and DeleFlag=1
and ShopCode
in
(
'EE034CB5-EF4B-4E5B-928D-2D3F733D5B4A',
'667557E2-D5A9-43FE-A18A-21DD68E19207'
)
and (CardGiftMoney>0 or CardMoney>0)

DECLARE @rowcount INT
DECLARE @allcount INT
SET @rowcount=1
SET @allcount=(select COUNT(1) from HL11.dbo.t_ShopSerLog
where CreateTime>='2017-07-01' and CreateTime<'2017-07-02' and [Status]=1 and DeleFlag=1
and ShopCode
in
(
'EE034CB5-EF4B-4E5B-928D-2D3F733D5B4A',
'667557E2-D5A9-43FE-A18A-21DD68E19207'
)
and (CardGiftMoney>0 or CardMoney>0))
DECLARE @Id INT
DECLARE @ShopCode UNIQUEIDENTIFIER
DECLARE @CustCode UNIQUEIDENTIFIER
DECLARE @CardMoney DECIMAL
DECLARE @CardGiftMoney DECIMAL
DECLARE @CreateTime DATETIME
SET @Id=1
WHILE(@rowcount<=@allcount)
BEGIN
select TOP 1 @ShopCode=ShopCode,@CustCode=CustCode,@CardMoney=CardMoney,@CardGiftMoney=CardGiftMoney,@CreateTime=CreateTime from @temp where Id=@Id

update HL10.dbo.t_CustVCard set PaidAmount=PaidAmount-@CardMoney,GiftAmount=GiftAmount-@CardGiftMoney,
LastUsedTime=@CreateTime where ShopCode=@ShopCode and CustUniqCode=@CustCode

SET @Id=@Id+1
SET @rowcount=@rowcount+1

END

sql表中数据遍历的更多相关文章

  1. pl/sql中误删表中数据并提交恢复办法

    最近在操作表中数据时,删除了表中数据,但是又想恢复,后来查到了官方的一篇文档,发现还蛮有用的,如下: 在pl/sql中运行,select * from A as of TIMESTAMP to_tim ...

  2. 我们在删除SQL Sever某个数据库表中数据的时候,希望ID重新从1开始,而不是紧跟着最后一个ID开始需要的命令

    一.如果数据重要,请先备份数据 二.删除表中数据 SQL: Delete From ('表名')  如:Delete From abcd 三.执行新语句 SQL: dbcc checkident('表 ...

  3. CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  4. Oracle 取两个表中数据的交集并集差异集合

    Oracle 取两个表中数据的交集 关键字: Oracle 取两个表中数据的交集 INTERSECT Oracle 作为一个大型的关系数据库,日常应用中往往需要提取两个表的交集数据 例如现有如下表,要 ...

  5. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

  6. mysql利用navicat导出表结构和表中数据

    LZ在网上搜索了要如何导出mysql的表结构和表中数据,发现有的方法不好用 记录一下好用的方式: 用navicat打开DB链接后,点击数据库,右击选择转储SQL文件,然后选择结构和数据: 之后弹出新的 ...

  7. mysql--对行(表中数据)的增删改查

    一.插入数据(增加)insert 1.插入数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); #指定字段来插入数据,插 ...

  8. 哈希算法和字典类的定义,DataSet中数据遍历的几种方法

    哈希算法的基本操作: 1.  哈希表(HashTable)简述   在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似 ...

  9. SAP 修改表和表中数据

    平时修改表中数据的方式有一下几种: 1.一般就是通过SE11或者是SE16进去,找到那条记录,然后将模式变成EDIT,然后修改保存. 2.通过SQL语句在程序中实现数据库表的修改操作 3.通过SE16 ...

随机推荐

  1. P4114 Qtree1

    思路 树剖一发,注意对LCA的处理 代码 #include <cstdio> #include <algorithm> #include <cstring> usi ...

  2. mybatis中mapper接口的参数设置几种方法

    方法一:忽略parameterType,加@param("xxx")注解 在mapper接口中加上@param("xxx")注解,则在配置文件中直接用即可 Li ...

  3. PostgreSQL 空间数据类型point、 line等

    PostgreSQL中提供了空间类型字段 几何类型 几何数据类型表示二维空间的对象.表6-18 显示了PostgreSQL 里面所有的几何类型.最基本的类型是“点”,它是其它数据类型的基础.   6. ...

  4. vue全局组件-父子组件传值

    全局组件注册方式:Vue.component(组件名,{方法}) demo: 子组件:upload.vue <template> <div > <div class=&q ...

  5. 环境搭建之allure的安装配置,及简单使用

    环境准备 首先是要安装好jdk的电脑上,运行java.javac这些命令都没有问题,要不安装allure时会报错 下载allure 如果直接用Jenkins上的插件,并不需要下载安装 allure官网 ...

  6. Java分布式锁看这篇就够了

    ### 什么是锁? 在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量. 而同步的本质是通过锁来实现的 ...

  7. 20175317 MyCP(课下作业,必做)

    一.题目要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内 ...

  8. mongo学习笔记2--索引及表设计

    -背景: 鉴于我们使用mongo作为数据库,期间少不了需要添加索引和对业务表进行设计.因此以下我对mongo索引及表设计原则做了一些分享.希望对大家有用,如有错误还望指正~ MongDB的索引类型简介 ...

  9. Linux系统优化及基础命令

    1.Linux系统优化及基础命令 2. vim编辑器 vim 操作命令 在命令模式下操作 pageup 往上翻页(重要指数****)pagedown 往下翻页(重要指数****)H 移动到屏幕首行gg ...

  10. subline 建立服务器

    http://blog.csdn.net/csdn_chenli/article/details/53173953