淚鋶滿靣
這問題有意思啊,我也碰到過,如果是在企業管理器裡面,打開表內容之後直接刪除是不行的,但如果您要通過SQL語句刪除,兩條記錄必須有不一致的地方。
在企業管理器中無法刪除
比如建立了一張表,如下圖所示,兩個字段:
真是一模一樣的記錄,我們在一條記錄上點右鍵,選擇刪除,如下圖所示:
結果是無法刪除的,提示兩條記錄內容一致無法刪除,如下圖所示:
那是不是說就無法刪除了呢?當然不是,有一個方法雖然笨一些,但總還可以刪除的。
創建自增主鍵將兩條記錄搞成不一樣
之所以無法刪除,原因就是兩條記錄“一模一樣”,想要刪除,就把它們搞成不一樣,比如,增加一個自增字段,如下圖所示:
增加了自增字段之後,兩條記錄就不同了,如下圖所示:
既然兩條記錄不同,而且有一個永不重複的字段區分開了,想要刪除就很容易。
刪除數據並還原數據表結構
您可以在查詢分析器中直接刪除,也可以寫個SQL刪除,比如:
delete test where FID=2腳本及執行結果如下圖所示:
回頭再把新增的字段幹掉,看上去不留痕跡,如下圖所示:
怎麼樣,這活幹的漂亮吧,哈哈。
靈眼旁觀
正常情況下,項目中的每張表都需要建一個唯一主鍵來避免數據重複的問題,假如插入或者更新成表中已存在的主鍵,執行語句是會直接報錯的。而假如沒有主鍵,數據庫是允許添加同樣的數據的,針對數據重複的情況,可以採用如下方法解決:基本思路就是通過關鍵字distinct篩選出非重複數據並插入臨時表,再把原表數據刪除,最後把臨時表的數據移到原表並刪除臨時表。
演示步驟:
- 先建一張沒有主鍵的userinfo表,並往表中插入三條重複數據
USE [test]
GO
/****** Object: Table [dbo].[userinfo] Script Date: 2019-06-11 12:21:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[userinfo](
[username] [nvarchar](50) NOT NULL,
[sex] [nvarchar](50) NOT NULL
) ON [PRIMARY]
GO
insert into userinfo(username,sex) values('xiaoming','nan');
insert into userinfo(username,sex) values('xiaoming','nan')
insert into userinfo(username,sex) values('xiaoming','nan')
用distinct關鍵字篩選出userinfo表中非重複數據,並插入臨時表temp
select distinct * into #temp from userinfo
清空userinfo表
delete userinfo
把臨時表數據複製到userinfo表
insert userinfo select * from #temp
刪除臨時表
drop table #temp
以上為個人觀點,歡迎在評論中發表自己不同的觀點,喜歡的加個關注,謝謝。