1、必須保證表中有主鍵或者唯一索引,或者某列數(shù)據(jù)不能重復(fù)。只有這樣,才可能使用一句SQL來實現(xiàn)。否則只能考慮其它辦法。下面的語句,假定BB列是不重復(fù)的,刪除后保存BB列值最大的那條記錄。
昂昂溪ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信: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關(guān)鍵字:
select
*
into
新表名
from
原表
4、取數(shù)據(jù)前3位,字段必須是類似char類型,使用類似substring這樣的函數(shù)(SYBASE是substring,ORACLE是substr):
select
substring(字段,1,3)
from
表名
把重復(fù)的那個字段設(shè)置為主鍵,不用做任何判斷,自動就是插入不了重復(fù)的數(shù)據(jù)了
2.就是你用sql判斷是否存在這條信息決定是否插入if(exists(select * from?tb?where username='zhangshan'))
以上兩種情況,看能不能滿足你的需求
還是先上代碼吧
,可以先看
SQL語句去掉重復(fù)記錄,獲取重復(fù)記錄
復(fù)制代碼
代碼如下:
ALTER
procedure
[dbo].[PROC_ITEMMASTER_GETUNIQUE]
@PAGEINDEX
INT,@uid
int,@itemnumber
varchar(50)
AS
begin
tran
--開始事務(wù)
drop
table
[ItemMaster].[dbo].[testim]
--刪除表
--把不重復(fù)記錄轉(zhuǎn)存到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
--否則提前事務(wù)
commit
tran
end
我的數(shù)據(jù)是這樣的:因為item_uid是標(biāo)識列,item_number有重復(fù)的,
我想過濾成這樣:
順帶說幾個在編程的時候遇到的小問題
1.程序
出現(xiàn)
Could
not
find
stored
procedure
找不到這個存儲過程
因為我的程序數(shù)據(jù)庫有四個,而默認(rèn)連接是A,但實際要執(zhí)行B庫里的存儲過程,導(dǎo)致出錯,
解決辦法1:可在A里面建個一樣的存儲過程2:在執(zhí)行連接的時候,替換下數(shù)據(jù)庫就行了
2.
asp.net/C#
將存儲過程中返回的數(shù)據(jù)集,填充到dataset/datatable
復(fù)制代碼
代碼如下:
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語句不能動態(tài)不加order
by
功能
比如
復(fù)制代碼
代碼如下:
--·@new_orderby
是傳入?yún)?shù),不能這樣寫
select
top
(10*(2-1))
item_uid
from
testim
order
by
@new_orderby
--執(zhí)行這個的時候,SQL會出現(xiàn)
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
'進(jìn)行連接)
(用case
end
也行)
4.
select
into
和
insert
into
select
兩種復(fù)制文句
(這里感謝)
1.INSERT
INTO
SELECT語句
語句形式為:Insert
into
Table2(field1,field2,...)
select
value1,value2,...
from
Table1
要求目標(biāo)表Table2必須存在,由于目標(biāo)表Table2已經(jīng)存在,所以我們除了插入源表Table1的字段外,還可以插入常量。
2.SELECT
INTO
FROM語句
語句形式為:SELECT
vale1,
value2
into
Table2
from
Table1
要求目標(biāo)表Table2不存在,因為在插入時會自動創(chuàng)建表Table2,并將Table1中指定字段數(shù)據(jù)復(fù)制到Table2中。
5.順便復(fù)習(xí)下常用的SQL方法語句
復(fù)制代碼
代碼如下:
declare
@name
varchar(200)
--聲明變量
set
@name='abcd;def'
--賦值
'exec
len
:'+Convert(varchar(10),Len(@name))
--convert(type,value)轉(zhuǎn)換,Len(value)獲取大小
'exec
charindex:'+Convert(varchar(10),CharIndex('e',@name))--CharIndex(find,value)
在value中查找find的位置
'not
replace:'+@name
'exec
replace:'+Replace(@name,';','')
--用replace替換
'exec
substring:'+Substring(@name,0,3)--用substring截取
@@RowCount
--返回上一行代碼受影響的行數(shù)
作者:chenhuzi
你建表的時候為什么不把那列弄成唯一約束?
create procedure insert_pig
@str varchar(6), --定義一個輸入?yún)?shù),就是那個是不是重復(fù)的值
@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('該品種已經(jīng)存在',16,8)
rollback tran --滾回事務(wù)
end
else
commit tran --提交事務(wù)
GO
--調(diào)用存儲過程
exec insert_pig '張三','男'
----張三,男就是傳入的參數(shù),也就是張三賦值給了@str,男賦值給了@str1
覺得可以給加加分吧
1、要有定位基準(zhǔn),也就是說,你的表必需要有一個不重復(fù)的鍵值,如果沒有,請你給這個表加一個字段,將這個字段設(shè)為自增變量字段,建議為int類型,比如字段名可為“編碼”。
2、查重復(fù)的數(shù)據(jù):
select?*from?表名?where?編碼?in
(select?編碼?from?表名?group?by?編碼?having?count(1)?=?2)
3、刪除所有有重復(fù)的記錄:
delete?from?表名?where?
編碼?in(select?編碼?from?表名?group?by?編碼?having?count(1)?=?2)
4、刪去重復(fù)的,只留下重復(fù)記錄中編碼最大的一條:
delete?from?表名?where?
編碼?in(select?編碼?from?表名?group?by?編碼?having?count(1)?=?2)?
and?編碼?not?in?(select?max(編碼)from?表名?group?by?編碼?having?count(1)?=2)
沒有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('該品種已經(jīng)存在',16,1)
GO
本文名稱:sqlserver防重復(fù),sqlserver去重復(fù)數(shù)據(jù)
網(wǎng)頁網(wǎng)址:http://www.rwnh.cn/article0/dscdoio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、Google、網(wǎng)站收錄、微信公眾號、建站公司、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)