sqlserver刪除記錄
❶ sqlserver刪除某行 dbo
1、delete操作會被完整記錄到日誌里,它需要大量空間和時間;
2、如果刪除中間發生中斷,一切刪除會回滾(在一個事務里);
3、同時刪除多行,記錄上的鎖也許會被提升為排它表鎖,從而阻礙操作完成之前有對這個表的操作(有時候會妨礙正常的業務)所以一般採取分批刪除的方法.
所以我們可以通過分批次遷移壓縮數據,這樣可以大大提升執行速度和執行效率
首先通過set rowcount 來控制每次刪除的記錄數
執行Sql語句
SET ROWCOUNT 0; 記錄每次執行刪除的條數
通過TOP的方法,並且使用循環
WHILE 1 = 1
BEGIN
DELETE TOP(5000) FROM dbo.Table WHERE time< '2016-12-12';
IF @@rowcount < 5000
BREAK;
END
❷ 清除sqlserver執行過的sql記錄
摘要 如果是SQL Server 2005以前的版本不能使用rowid來刪除,你要先做一個臨時表,欄位多一類型——自動增量,然後再將原表數據轉移到臨時表中,再刪除,然後再轉回去,比較麻煩。
❸ 教您如何簡單刪除SQLServer資料庫的所有數據
也許很多讀者朋友都經歷過這樣的事情:要在開發資料庫基礎上清理一個空庫,但由於對資料庫結構缺乏整體了解,在刪除一個表的記錄時,刪除不了,因為可能有外鍵約束,一個常見的資料庫結構是一個主表,一個子表,這種情況下一般都得先刪除子表記錄,再刪除主表記錄。
1.按照先後順序逐個刪除,這個方法在表非常多的情況下顯得很不現實,即便是表數量不多,但約束比較多時,你還是要花費大量的時間和精力去研究其間的約束關系,然後找出先刪哪個表,再刪哪個表,最後又刪哪個表。
首先得編寫代碼循環檢查所有的表,這里我推薦一個存儲過程sp_MSForEachTable,因為在微軟的官方文檔中沒有對這個存儲過程有描述,很多開發人員也許都還未曾聽說,所以你在互聯網上搜索得到的解決辦法大多很復雜,也許有的人會認為,既然沒有官方文檔,這個存儲過程可能會不穩定,打心理上會排斥它,但事實並非如此。下面來先看一個完整的腳本:
這個腳本創建了一個命名為sp_DeleteAllData的存儲過程,前面兩行語句分別禁用約束和觸發器,第三條語句才是真正地刪除所有數據,接下里的語句分別還原約束和觸發器,最後一條語句是顯示每個表中的記錄,當然這條語句也可以不要,我只是想確認一下是否清空了所有表而已。
❹ sqlserver日誌找回刪除記錄
右鍵,還原,事務日誌,下一步,下一步,下一步,完成。
❺ 怎麼清楚sql sever中的記錄
--1. 將當前資料庫的全部臟頁寫入磁碟。「臟頁」是已輸入緩存區高速緩存且已修改但尚未寫入磁碟的數據頁。
-- CHECKPOINT 可創建一個檢查點,在該點保證全部臟頁都已寫入磁碟,從而在以後的恢復過程中節省時間。
CHECKPOINT
--2. 若要從緩沖池中刪除清除緩沖區,請首先使用 CHECKPOINT 生成一個冷緩存。這可以強制將當前資料庫的全部臟頁寫入磁碟,然後清除緩沖區。
-- 完成此操作後,便可發出 DBCC DROPCLEANBUFFERS 命令來從緩沖池中刪除所有緩沖區。
DBCC DROPCLEANBUFFERS
--3. 釋放過程緩存將導致系統重新編譯某些語句(例如,即席 SQL 語句),而不重用緩存中的語句。
DBCC FREEPROCCACHE
--4. 從所有緩存中釋放所有未使用的緩存條目。SQL Server 2005 Database Engine 會事先在後台清理未使用的緩存條目,以使內存可用於當前條目。
-- 但是,可以使用此命令從所有緩存中手動刪除未使用的條目。
DBCC FREESYSTEMCACHE ( 'ALL' )
--5. 要接著執行你的查詢,不然SQLServer會時刻的自動往緩存里讀入最有可能需要的數據頁.
❻ 如何清除SQLServer日誌
SQLSERVER的資料庫日誌佔用很大的空間,下面提供三種方法用於清除無用的資料庫日誌文件
方法一:
1、打開查詢分析器,輸入命令
BACKUP LOG database_name WITH NO_LOG
2、再打開企業管理器--右鍵要壓縮的資料庫--所有任務--收縮資料庫--收縮文件--選擇日誌文件--在收縮方式里選擇收縮至xxm,這里會給出一個允許收縮到的最小m數,直接輸入這個數,確定就可以了。
方法二:
設置檢查點,自動截斷日誌
一般情況下,SQL資料庫的收縮並不能很大程度上減小資料庫大小,其主要作用是收縮日誌大小,應當定期進行此操作以免資料庫日誌過大
1、設置資料庫模式為簡單模式:打開SQL企業管理器,在控制台根目錄中依次點開Microsoft SQL Server-->SQL Server組-->雙擊打開你的伺服器-->雙擊打開資料庫目錄-->選擇你的資料庫名稱(如用戶資料庫cwbase1)-->然後點擊右鍵選擇屬性-->選擇選項-->在故障還原的模式中選擇「簡單」,然後按確定保存
2、在當前資料庫上點右鍵,看所有任務中的收縮資料庫,一般裡面的默認設置不用調整,直接點確定
3、收縮資料庫完成後,建議將您的資料庫屬性重新設置為標准模式,操作方法同第一點,因為日誌在一些異常情況下往往是恢復資料庫的重要依據
方法三:通過SQL收縮日誌
把代碼復制到查詢分析器里,然後修改其中的3個參數(資料庫名,日誌文件名,和目標日誌文件的大小),運行即可
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE tablename -- 要操作的資料庫名
SELECT @LogicalFileName = 'tablename_log', -- 日誌文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想設定的日誌文件的大小(M)
-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log')
DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
方法四:刪除日誌文件。
此方法有一定的風險性,因為sql server的日誌文件不是即時寫入資料庫主文件的,如處理不當,會造成數據的損失。1、操作前請斷開所有資料庫連接。
2、分離資料庫
分離資料庫:企業管理器->伺服器->資料庫->cwbase1->右鍵->分離資料庫
分離後,cwbase1資料庫被刪除,但保留了數據文件和日誌文件
3、刪除log物理文件
刪除LOG物理文件,然後附加資料庫: 企業管理器->伺服器->資料庫->右鍵->附加資料庫
此法生成新的log,大小隻有500多k。
注意:建議使用第一種方法。操作前請確保所有操作員都已經推出系統,斷開資料庫的連接。
以上操作前,請務必做好數據備份!
1.sql server 2005 清除日誌語句
mp transaction 資料庫名稱 with no_log
backup log 資料庫名稱 with no_log
dbcc shrinkdatabase(資料庫名稱)
❼ sqlserver怎麼刪除重復數據
1、查找表中多餘的重復記錄,重復記錄是根據單個欄位(peopleId)來判斷
select
* from people
where peopleId in (select peopleId from
people group by peopleId having count(peopleId)
> 1)
2、刪除表中多餘的重復記錄,重復記錄是根據單個欄位(peopleId)來判斷,只留有rowid最小的記錄
delete
from people
where peopleId in (select peopleId from
people group by peopleId having
count(peopleId) > 1)
and rowid not in (select min(rowid) from
people group by peopleId having count(peopleId
)>1)
3、查找表中多餘的重復記錄(多個欄位)
select * from vitae a
where (a.peopleId,a.seq)
in (select peopleId,seq from vitae group by peopleId,seq having
count(*) > 1)
4、刪除表中多餘的重復記錄(多個欄位),只留有rowid最小的記錄
delete from vitae a
where
(a.peopleId,a.seq) in (select peopleId,seq from vitae group by
peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from
vitae group by peopleId,seq having count(*)>1)
5、查找表中多餘的重復記錄(多個欄位),不包含rowid最小的記錄
select * from vitae a
where
(a.peopleId,a.seq) in (select peopleId,seq from vitae group by
peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from
vitae group by peopleId,seq having count(*)>1)
(二)
比方說
在A表中存在一個欄位「name」,
而且不同記錄之間的「name」值有可能會相同,
現在就是需要查詢出在該表中的各記錄之間,「name」值存在重復的項;
Select
Name,Count(*) From A Group By Name Having Count(*) > 1
如果還查性別也相同大則如下:
Select Name,sex,Count(*) From A Group By Name,sex Having
Count(*) > 1
❽ 如何刪除sqlserver資料庫日誌文件
1、確定SQL資料庫的安裝路徑與所用的SQL資料庫名稱。2、點擊開始--程序--MicrosoftSQLServer--查詢分析器--確定,進入軟體里,點擊菜單幫助--Transact-sql幫助(S)--索引--輸入(sp_attach_single_file_db),在右邊對話框里找到以下的命令或者在空白處直接輸入以下的命令:EXECsp_detach_db@dbname='pubs'returnEXECsp_attach_single_file_db@dbname='pubs',@physname='c:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\pubs.mdf'注意:return是加入的命令語名,將資料庫(*.LDF與*.MDF)分離,再將資料庫名改回所要選的,即是pubs改為J2002。即是:EXECsp_detach_db@dbname='J2002'returnEXECsp_attach_single_file_db@dbname='J2002',@physname='c:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\J2002.mdf'3、輸入命令後,點擊菜單查詢--執行,下面對話框出現命令"命令已成功完成"。4、刪除命令(EXECsp_detach_db@dbname='J2002'return),進入安裝SQL資料庫路徑里將J2002.ldf文件重命名。5、接著第3點開始,點擊菜單查詢--執行,下面對話框出現命令"設備激活錯誤。物理文件名'C:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\J200188.ldf'可能有誤。已創建名為'c:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\j200188_log.LDF'的新日誌文件"。