sqlserver防重复,sqlserver去重复数据

sqlserver 数据有重复怎么删除

1、必须保证表中有主键或者唯一索引,或者某列数据不能重复。只有这样,才可能使用一句SQL来实现。否则只能考虑其它办法。下面的语句,假定BB列是不重复的,删除后保存BB列值最大的那条记录。

昂昂溪ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

delete

from

where

aa

in

(select

aa

from

group

by

aa

having

count(aa)

1)

and

bb

not

in

(select

max(bb)

from

group

by

aa

having

count(aa)

1);

2、有多种写法:

delete

A

from

B

where

A.AA

=

B.AA

delete

A

from

A,B

where

A.AA

=

B.AA

delete

A

where

AA

in

(select

AA

from

B)

3、使用into关键字:

select

*

into

新表名

from

原表

4、取数据前3位,字段必须是类似char类型,使用类似substring这样的函数(SYBASE是substring,ORACLE是substr):

select

substring(字段,1,3)

from

表名

如何防止sqlserver merge into插入重复

把重复的那个字段设置为主键,不用做任何判断,自动就是插入不了重复的数据了

2.就是你用sql判断是否存在这条信息决定是否插入if(exists(select * from tb where username='zhangshan'))

以上两种情况,看能不能满足你的需求

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

还是先上代码吧

,可以先看

SQL语句去掉重复记录,获取重复记录

复制代码

代码如下:

ALTER

procedure

[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

@@error0

begin

rollback

tran

--出错则回滚

end

else

begin

--否则提前事务

commit

tran

end

我的数据是这样的:因为item_uid是标识列,item_number有重复的,

我想过滤成这样:

顺带说几个在编程的时候遇到的小问题

1.程序

出现

Could

not

find

stored

procedure

找不到这个存储过程

因为我的程序数据库有四个,而默认连接是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.StoredProcedure;

cmd.Parameters.Add("@MaxId",

SqlDbType.Int).Value

=

12000;

SqlDataAdapter

sda

=

new

SqlDataAdapter(cmd);

DataTable

dt

=

new

DataTable();

sda.Fill(dt);

在这感谢

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.

不过我找到解决办法,不过很麻烦,

(第二个回答用

'

sql

'进行连接)

(用case

end

也行)

4.

select

into

insert

into

select

两种复制文句

(这里感谢)

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

sqlserver存储过程防止字段插入重复

你建表的时候为什么不把那列弄成唯一约束?

create procedure insert_pig

@str varchar(6), --定义一个输入参数,就是那个是不是重复的值

@str1 char(2)

--把每一列弄成变量存入,不知你的表有几字段,这里我就以两个字段为例

as

declare @sum int

begin tran

insert into admin (列1,列2) values (@str,@str1)

select @sum=count(*) from admin where username=@str

if(@sum0)

begin

raiserror('该品种已经存在',16,8)

rollback tran --滚回事务

end

else

commit tran --提交事务

GO

--调用存储过程

exec insert_pig '张三','男'

----张三,男就是传入的参数,也就是张三赋值给了@str,男赋值给了@str1

觉得可以给加加分吧

SQLServer去重复查询,不删除重复数据

1、要有定位基准,也就是说,你的表必需要有一个不重复的键值,如果没有,请你给这个表加一个字段,将这个字段设为自增变量字段,建议为int类型,比如字段名可为“编码”。

2、查重复的数据:

select *from 表名 where 编码 in

(select 编码 from 表名 group by 编码 having count(1) = 2)

3、删除所有有重复的记录:

delete from 表名 where 

编码 in(select 编码 from 表名 group by 编码 having count(1) = 2)

4、删去重复的,只留下重复记录中编码最大的一条:

delete from 表名 where 

编码 in(select 编码 from 表名 group by 编码 having count(1) = 2) 

and 编码 not in (select max(编码)from 表名 group by 编码 having count(1) =2)

sqlserver2000防止重复插入触发器

没有if insert(pname) 这种写法,只有if update(pname)这种写法

你可以这样去判断:

Create trigger insert_pig

on pig

for insert

AS

begin

IF EXISTS (SELECT 1 FROM pig

WHERE pname = (select pname from inserted))

RaiseError('该品种已经存在',16,1)

GO


本文标题:sqlserver防重复,sqlserver去重复数据
文章出自:http://myzitong.com/article/dscdoio.html