sqlserver中多行所有數(shù)據(jù)重復(fù),無法更新或刪除問題,通常是在沒有主鍵的情況下的表. 錯誤:
先確認(rèn)一下表中有沒有主鍵,要是沒有就得使用臨時表來實現(xiàn)刪除重復(fù)的行。方法一:
示例: 方法一: delete from tab_test2 where id=(select max(id) from tab_test2 group by id,uid having count(1)>1)
方法二:注意:#t是臨時表,在tempdb數(shù)據(jù)庫中的臨時表節(jié)點下可以找到,sqlserver服務(wù)重啟就會消失的表. select id,uid into #t from tab_Test2 group by id,uid truncate table tab_Test2 insert into tab_Test2 select * from #t
msdn: 在進(jìn)行SQL數(shù)據(jù)庫維護(hù)時,發(fā)現(xiàn)有幾行記錄明顯有錯誤卻刪除不了,一執(zhí)行刪除命令就提示“已更新或刪除的行值要么不能使該行成為唯一行,要么改變了多個行(X行)?!北憩F(xiàn)為在:數(shù)據(jù)庫中出現(xiàn)了重復(fù)的鍵值或數(shù)據(jù),當(dāng)試圖刪除時錯誤提示信息就出來了。建立的幾個表都沒有關(guān)鍵字,設(shè)置好關(guān)鍵字后問題解決。 微軟的官方網(wǎng)站對此問題也有說明,BUG: 您可能會收到當(dāng)您嘗試使用 SQL Server Management Studio 更新 SQL Server 2005 中的表的行時 微軟給了個替代方法:要變通解決此問題,創(chuàng)建 SQL Server Management Studio 中的在新的查詢窗口。 然后,運行 SQL UPDATE 語句更新表中的行。 方法一: 1、單擊SQL Server Management Studio工具欄上的“新建查詢”按鈕,然后按照提示登陸要修改的數(shù)據(jù)表所在的數(shù)據(jù)庫 2、然后會在數(shù)據(jù)庫的編輯窗口彈出一個可以執(zhí)行SQL語句的窗口,在該窗口輸入以下SQL語句 delete 數(shù)據(jù)庫名.表名 where 要刪除的字段名 = '字段值' 例如:delete pyj_db.dbo.Cellphone_related where Cellphone_Num = '111'
其實利用INSERT INTO 做一些小的變換,這個問題就可迎刃而解了,具體步驟如下: 先將原用的表做個備份,根據(jù)條件將滿足條件的數(shù)據(jù)導(dǎo)到新的表來,再將原表清除,最后將備份表中的數(shù)據(jù)select過來即可。 第一步:在備份表中導(dǎo)入需要的數(shù)據(jù) INSERT INTO DataFile_backup 第二步:清除原表中的數(shù)據(jù) Delete from DataFile 第三步:從備份表中導(dǎo)入數(shù)據(jù) select * from DataFile
|
|