sql表中数据遍历

步骤:

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<[email protected])
BEGIN 
select TOP 1 @ShopCode=ShopCode,@CustCode=CustCode,@CardMoney=CardMoney,@CardGiftMoney=CardGiftMoney,@CreateTime=CreateTime from @temp where [email protected]

update HL10.dbo.t_CustVCard set [email protected],[email protected],
[email protected] where [email protected] and [email protected]

SET @[email protected]+1
SET @[email protected]+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<[email protected])
BEGIN
select TOP 1 @ShopCode=ShopCode,@CustCode=CustCode,@CardMoney=CardMoney,@CardGiftMoney=CardGiftMoney,@CreateTime=CreateTime from @temp where [email protected]

update HL10.dbo.t_CustVCard set [email protected],[email protected],
[email protected] where [email protected] and [email protected]

SET @[email protected]+1
SET @[email protected]+1

END

时间: 2024-11-05 19:00:39

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

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

一.如果数据重要,请先备份数据 二.删除表中数据 SQL: Delete From ('表名')  如:Delete From abcd 三.执行新语句 SQL: dbcc checkident('表名',reseed,0) 如:dbcc checkident('abcd',reseed,0) 注: { DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value) 检查指定表的当前标识值,如有必要,还对标识值进行更正. } 这样操作后,新插入的

导出 SQL SERVER 表中数据为脚本

ALTER PROCEDURE [dbo].[Usp_OutputData] @tablename sysname, @outputIdentitycolumn int AS declare @column varchar(3000) declare @columndata varchar(8000) declare @sql varchar(8000) declare @xtype tinyint declare @name sysname declare @objectId int decl

SQL语句中使用 with 递归实现表中数据树状显示

在开发过程中会遇到很多实现树状的功能,之前为了实现数据的树状显示一般都是通过程序里面的递归实现,今天试了一下通过sql语句实现具体如下: 表名:DeptInfo 字段:DeptId(部门编号),DeptName(部门名称),DeptUpId(部门上级ID),DeptPath(部门层级) 从DeptUpId和DeptPath中可看出表数据可能很乱: 为了实现表中数据树状显示,条例清晰具体代码实现如下: with dept as(select DeptId,DeptUpId from DeptInf

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

最近在操作表中数据时,删除了表中数据,但是又想恢复,后来查到了官方的一篇文档,发现还蛮有用的,如下: 在pl/sql中运行,select * from A as of TIMESTAMP to_timestamp('20150401','yyyymmdd'); 此原理是利用Flashback Query这一特性,最常被应用的就是修复误操作的数据了.注意,这并不是说Flashback Query能够恢复数据.Flashback Query本身不会恢复任何操作或修改,也不能告诉你做过什么操作或修改,

Oracle 和SQL server中数据备份与恢复

Oracle 侧 创建一个表,将现有表数据导入其中. create Table  TB_NYU_TENDERTBL_BAK   as  select *  from  TB_NYU_TENDERTBL  where  1=1 删除原来表内容. DELETE  FROM TB_NYU_TENDERTBL 恢复表的内容 insert  into TB_NYU_TENDERTBL  select  * from  TB_NYU_TENDERTBL_BAK SQL server侧 select  * i

修改表中数据的两种方法(update改)

1.通过点击按钮来执行修改表中数据.(数据库和表的创建不在详细介绍,请自动阅读数据库和表的创建) 第一种方法:直接使用SQL来操作数据库,调用execSQL(sql)语句 public class MainActivity extends AppCompatActivity { private Button mPudateButton; private MySqliteHelper mMySqliteHelper; private SQLiteDatabase db; @Override pro

删除表中数据的两种方法(delete删)

1.通过点击按钮来执行删除表中数据.(数据库和表的创建不在详细介绍,请自动阅读数据库和表的创建) 第一种方法:直接使用SQL来操作数据库,调用execSQL(sql)语句 public class MainActivity extends AppCompatActivity { private Button mDeleteButton; private MySqliteHelper mMySqliteHelper; private SQLiteDatabase db; @Override pro

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

MySQL查询数据表中数据记录(包括多表查询) MySQL查询数据表中数据记录(包括多表查询) 转自:http://www.baike369.com/content/?id=5355 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: select selection_list // 要查询的内容,选择哪些列 from table_list // 从什么表中查询,从何处选择行 where primary_

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

Oracle 取两个表中数据的交集 关键字: Oracle 取两个表中数据的交集 INTERSECT Oracle 作为一个大型的关系数据库,日常应用中往往需要提取两个表的交集数据 例如现有如下表,要求找出工资2500(不含2500)以上并且是男性(M)的员工编号,那么就要利用这两个表的关系做一个交集了 employee CODE NAME GENDER 001 Tom M 002 Jerry M 003 Ana F salary CODE SALARY 001 2800 002 2500 00