sql 一条记录多次操作(分隔符或者其它处理)--替换游标

大家都知道在操作大量的记录的时候,游标的性能真的是慢的令人发指,但是游标对一条记录操作方便性又令人爱不释手,有没有能兼顾性能又能方便呢,答案是肯定的,昨天正好进行项目sql语句优化,遇到了一个一条记录需要多次操作不能简单的使用其它语句替换的实例。

例子:

表a

FF字段

-----------

001,002,003

-----------

004,005

-----------

006

通常我们遇到没有办法替换游标的原因就是因为出现了上面类似的记录,一条记录需要进行单独处理。

这块解决方案,先是把上面的记录的内容改成多条,具体做法如下:

1. 建立两张张表a的临时表 a1,a2;其中a1,为a的复制表,a2表为空白表

2. 使用while循环判select top 1 ff from a1 where charindex(‘,‘,ff)>0 是否存在,如果存在执行如下操作:

1. insert into a2 select substring(ff,1,charindex(‘,‘,ff)-1) from a1 where charindex(‘,‘,ff)>0  ---取得001插入第一条记录,取得004插入第二条

2. update a1 set ff=substring(ff,charindex(‘,‘,ff)+1,len(ff)-charindex(‘,‘,ff)) where charindex(‘,‘,ff)>0 --去掉已经插入a2表的记录中的内容

3. 继续循环while判断

这样我们就得到了a1和a2表是已经完全被拆开ff字段的记录的记录了,可以像下面一样使用了

select ff from a1

union all

select ff from a2

这样单条记录多次被操作不想使用游标的一种情况就得到了解决。

ps:大家需要注意,在临时表建立时,肯定不能有索引的存在的,其它的问题根据具体情况解决

时间: 2024-10-13 18:14:09

sql 一条记录多次操作(分隔符或者其它处理)--替换游标的相关文章

sql 多条记录插入

--多条记录插入,用逗号分开值. INSERT dbo.studentinfor ( id, name, class, age, hpsw ) VALUES ( N'3', -- id - nvarchar(50) N'test3', -- name - nvarchar(50) N'3', -- class - nvarchar(50) N'23', -- age - nvarchar(50) N'123' -- hpsw - nvarchar(50) ) , ( N'4', -- id -

sql 一条记录多个字段 对应另外一个表 取描述的写法

Users表: 订单表: 现在订单表中,创建人和更新人都是对应于Users表的主键UserID,查询订单时,想显示用户名称 1.先给出自己平时的写法 select o.OrderID, isnull((select top 1 UserName from Users where UserID=o.CreatePeople),'') CreatePeople,--创建人 isnull((select top 1 UserName from Users where UserID=o.UpdatePe

SQL 一条记录的的两个字段值相同与不同的查询

select * from (select xm,je from table) a , (select xm01,je01 from table) bwhere a.xm = b.xm01and a.je <> b.je01 <> 或 !=

SQL Server 审计功能-记录所有的操作记录

SQL Server 审计-记录所有的操作记录 说到审计这个话题,相信作为一个企业管理员都知道,比如一般作为一个AD管理员的话,一般都会通过Policy开启审计功能,记录一些自定义的事务日志.对于SQL Server来说,审计也是一样的,SQL Server审计对象收集单个实例的服务器或数据库级的动作和行为监控组. 审计是在SQL Server实例级. 可以有多个审计/ SQL服务器实例.当你定义一个审计,你指定位置的输出结果. 这是审计目标. 审计是在创建的禁用状态,不会自动审计任何行动. 启

SQL 一次插入多条记录

本文介绍如何快速插入多条数据到数据表中,以满足sql语句学习或项目测试的需要. 本文非原创,是对移步原文的重新整理. 如有以下表格,如图: 1,原始添加记录的方式,sql语句如下: 1 insert into City(Code,CityCName) values('TS','唐山'); 2,使用Union执行插如操作,sql语句如下: 1 insert into City(Code,CityCName) 2 select 'ZZ','郑州' 3 union 4 select 'HD','邯郸'

使用PL/SQL删除百万条记录的大表

使用PL/SQL删除百万条记录的大表: 最近开发人员对测试环境数据库进行了压力测试,数据库中产生了大量的脏数据.有几张大表里数据量均在百万甚至千万条的记录数.开发人员现提出需求如下: 只清理其中的部分脏数据,不允许对这些表使用truncate操作.于是就有了下面的PL/SQL清理脚本: 1.编写删除数据表数据的脚本内容如下: $ cat data_del.sql set serveroutput onshow serveroutputDECLARE V_LOGNUM NUMBER;V_NEEDA

执行一条sql语句update多条记录实现思路

执行一条sql语句update多条记录实现思路 如果你想更新多行数据,并且每行记录的各字段值都是各不一样,你会怎么办呢?本文以一个示例向大家讲解下如何实现如标题所示的情况,有此需求的朋友可以了解下 通常情况下,我们会使用以下SQL语句来更新字段值: UPDATE mytable SET myfield='value' WHERE other_field='other_value'; 但是,如果你想更新多行数据,并且每行记录的各字段值都是各不一样,你会怎么办呢?举个例子,我的博客有三个分类目录(免

用一条SQL语句取出第 m 条到第 n 条记录的方法

原文:用一条SQL语句取出第 m 条到第 n 条记录的方法   --从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本) SELECT TOP n-m+1 * FROM Table WHERE (id NOT IN (SELECT TOP m-1 id FROM Table )) --从TABLE表中取出第m到n条记录 (Exists版本) SELECT TOP n-m+1 * FROM TABLE AS a WHERE Not Exists (Select * From 

使用SQL语句逐条更新每条记录

declare @i int declare @j int declare @phone varchar(20) set @j=1 select @i=count(*) from LatestLocation DECLARE L_cursor CURSOR FOR SELECT Phone FROM LatestLocation OPEN L_cursor while @j<[email protected] begin FETCH NEXT FROM L_cursor into @phone