当前位置:首页 » 服务存储 » 存储过程中有重复的数据怎么办
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

存储过程中有重复的数据怎么办

发布时间: 2022-09-08 10:40:40

存储过程执行定时任务后出现重复值怎么解决

什么数据库的?
出现重复有可能是几种情况
1、你insert语句中本身数据就不对,有重复值。
2、如果执行多次,应该是前几次数据没清理掉。

这个要具体看代码,凭你一个题目无法判断是什么情况

❷ oracle存储过程有数据,但是出现未找到数据情况数据中没有重复数据,如果有重复的数据怎么写,大神指教

这个在定义游标的时候就应该限定好
要确保同keywords的情况下没有2条不同的记录

sqlserver利用存储过程去除重复行的sql语句

还是先上代码吧
,可以先看
SQL语句去掉重复记录,获取重复记录
复制代码
代码如下:
ALTER
procere
[dbo].[PROC_ITEMMASTER_GETUNIQUE]
@PAGEINDEX
INT,@uid
int,@itemnumber
varchar(50)
AS
begin
tran
--开始事务
drop
table
[ItemMaster].[dbo].[testim]
--删除表
--把不重复记录转存到testim中
select
*
into
[ItemMaster].[dbo].[testim]
from
[ItemMaster].[dbo].[dat_item_master]
where
item_uid
in(select
min(item_uid)
as
item_uid
from
[ItemMaster].[dbo].[dat_item_master]
group
by
item_number)
and
status=0
select
top
10
*
from
[ItemMaster].[dbo].[testim]
where
item_uid
not
in
(select
top
(10*(@PAGEINDEX-1))
item_uid
from
[ItemMaster].[dbo].[testim])
and
owneruid=@uid
and
item_number
like
@itemnumber+'%'
--判断是否出错
if
@@error<>0
begin
rollback
tran
--出错则回滚
end
else
begin
--否则提前事务
commit
tran
end
我的数据是这样的:因为item_uid是标识列,item_number有重复的,
我想过滤成这样:
顺带说几个在编程的时候遇到的小问题
1.程序
出现
Could
not
find
stored
procere
找不到这个存储过程
因为我的程序数据库有四个,而默认连接是A,但实际要执行B库里的存储过程,导致出错,
解决办法1:可在A里面建个一样的存储过程2:在执行连接的时候,替换下数据库就行了
2.
asp.net/C#
将存储过程中返回的数据集,填充到dataset/datatable
复制代码
代码如下:
SqlConnection
conn
=
new
SqlConnection(ConfigurationManager.ConnectionStrings["SolutionSQLServer"].ToString());
SqlCommand
cmd
=
new
SqlCommand("Test",conn);
cmd.CommandType
=
CommandType.StoredProcere;
cmd.Parameters.Add("@MaxId",
SqlDbType.Int).Value
=
12000;
SqlDataAdapter
sda
=
new
SqlDataAdapter(cmd);
DataTable
dt
=
new
DataTable();
sda.Fill(dt);
在这感谢
http://www.cnblogs.com/liujuncm5/archive/2009/08/31/1557569.html
3.在存储过程里面,写SQL语句不能动态不加order
by
功能
比如
复制代码
代码如下:
--·@new_orderby
是传入参数,不能这样写
select
top
(10*(2-1))
item_uid
from
testim
order
by
@new_orderby
--执行这个的时候,SQL会出现
The
SELECT
item
identified
by
the
ORDER
BY
number
1
contains
a
variable
as
part
of
the
expression
identifying
a
column
position.
Variables
are
only
allowed
when
ordering
by
an
expression
referencing
a
column
name.
不过我找到解决办法,不过很麻烦,
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=9328
(第二个回答用
'
sql
'进行连接)
http://databases.aspfaq.com/database/how-do-i-use-a-variable-in-an-order-by-clause.html (用case
end
也行)
4.
select
into

insert
into
select
两种复制文句
(这里感谢http://www.cnblogs.com/freshman0216/archive/2008/08/15/1268316.html)
1.INSERT
INTO
SELECT语句
语句形式为:Insert
into
Table2(field1,field2,...)
select
value1,value2,...
from
Table1
要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。
2.SELECT
INTO
FROM语句
语句形式为:SELECT
vale1,
value2
into
Table2
from
Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。
5.顺便复习下常用的SQL方法语句
复制代码
代码如下:
declare
@name
varchar(200)
--声明变量
set
@name='abcd;def'
--赋值
print
'exec
len
:'+Convert(varchar(10),Len(@name))
--convert(type,value)转换,Len(value)获取大小
print
'exec
charindex:'+Convert(varchar(10),CharIndex('e',@name))--CharIndex(find,value)
在value中查找find的位置
print
'not
replace:'+@name
print
'exec
replace:'+Replace(@name,';','')
--用replace替换
print
'exec
substring:'+Substring(@name,0,3)--用substring截取
print
@@RowCount
--返回上一行代码受影响的行数
作者:chenhuzi

❹ oracle 存储过成,删除重复的数据

我没用过oracle,但SQL脚本应该差不多吧。
我用MSSQL的脚本这样写,先查询,你可以自己验证一下,免得误删除了。
select * from 表名 a
where exists(select * from 表名 where 用户=a.用户 and 报告时间>=dateadd(d,-1,a.报告时间) and 报告时间<a.报告时间)
这儿有一点dateadd(d,-1,a.报告时间)指的是一天前,所以有可能昨天12点提前,但今天8点提交也会被删除的。这儿可以视你的报告时间来定,若所有报告时间均是8:00——18:00,那么可以使用dateadd(h,-10,a.报告时间)来。
删除的脚本如下:
delete * from 表名 a
where exists(select * from 表名 where 用户=a.用户 and 报告时间>=dateadd(d,-1,a.报告时间) and 报告时间<a.报告时间)

❺ Sql Server表里面有2行数据完全一样,如何删除

Sql
Server里面如果没有设定主键而删除重复数据很麻烦:
一:保留重复记录中的一条记录,其他全部删除。
--1:建立临时表,把不重复的数据转存
select
distinct
*
into
#Tmp
from
表名;
--2:删除原表数据
truncate
table
表名;
--3:将数据导回
insert
into
表名
select
*
from
#Tmp;
--4:删除临时表
drop
table
#Tmp;
二:删除全部重复记录:
delete
from
表名
where
字段1=xxx,字段2=xxx....(把你重复记录的条件列在这里)
---
以上,希望对你有所帮助。

❻ ORACLE存储过程同步表数据出现重复,存储过程如下

你这个不仅仅是重复,而且是大量重复吧。
你的游标那里设定的是一个集合,也就是select form_id as formid from cc_busi_form。
我们假设他有三个值,0,1,2
那么在下面循环时(for i in formid loop),我们假设每次读取一个值,第一次读取0,那么后面的语句就变为
insert into cc_busi_form select form.*,'hx' from cc_busi_form@LINK_HX form where form.form_id<>0
也就是说form.form_id=1或2是插入的。
第二次i.formid=1,那么form.form_id=0或2是插入的,这时form.form_id=2这部分就重复了。
第三次i.formid=2,那么form.form_id=0或1是插入的,这时form.form_id=0和1这两部分就都重复了。也就是说你插入的数据是原来数据的二倍的量。
你的formid越多,重复的量也就越大,大概是(formid的个数-1)倍(如果每个formid都不同,那么就是它,如果有重复,那么会有一定出入)。
其实没必要用游标,直接用子查询就行 not in 或者not exsit,当然,我不知道你的业务逻辑,具体的还要你自己看。

❼ 存储过程插入sql数据会重复问题

你可以根据关键字段判断是否重复
if not exists (select * from TBL_CUST_DATA_TABLE_0000000298 where 关键字段=)
BEGIN
insert into TBL_CUST_DATA_TABLE_0000000298
(FIELD_50028161,FIELD_50055037,FIELD_50179728,mobile_tele_no,FIELD_50252045,FIELD_50368392,FIELD_50569934,FIELD_50585876)
select CONTACT_ID, INQUIRE_CODE,CALLEE, CALLER, CUST_BAND,CUST_LEVEL,START_TIME,CREATE_TIME
from test_v8_busy_revisit where start_time >=begintime and start_time <=endtime and OUTBOUND_STAT ='1' ;
update test_v8_busy_revisit set OUTBOUND_STAT='10' where start_time >=begintime and start_time <=endtime and OUTBOUND_STAT ='1' ;
commit;
end;

❽ 存储过程存储不重复数据,如有重复返回重复的数据

先查询数据存不存在,存在则返回查询的值,不存在则insert然后返回success

❾ 一个存储过程负责插入数据,job调用存储过程后出现大量重复,job执行几遍数据就重复几遍,怎么解决

存储过程中,每次删除原表里的数据
譬如
begin
delete from 表名 where 条件;
commit;

然后这个地方再执行你原来存储过程里的东西
end;

❿ oracle 存储过程中,不想让数据出现重复值该怎么办

你的表没有主键的吗?
如果你是一条记录多个列不想有重复的值,你可以把这几列建立唯一约束。
如果你是一列记录不想有重复值,你可以把该列建立唯一约束。
你用存储过程插入数据还要判断是否重复,面对频繁的插入你考虑到效率了没有,而且还非常容易出错。正常的方法都是通过约束达到去重。
如果非要使用存储过程,
使用
if (select * from tablename where 你的列='你插入的变量') 判断是否有值
then
dbms_output.putline('该值已经存在') ;
else
insert into tablename 你的列 values ('你插入的变量');
end if