我試圖將記錄從數據庫中的表存檔到存檔數據庫中的相同表。我需要能夠爲日期大於三年前的所有記錄執行插入操作,然後刪除這些行。但是,這張表擁有數百萬條實時的記錄,所以我想一次運行大約100到1000個區塊。到目前爲止,我的存儲過程執行整個插入語句,然後是一個刪除語句(在事務中),它與插入語句具有基本相同的WHERE子句。我的WHILE循環正在查找表格中最早的日期以確定循環何時完成。其中一些似乎相當低效。有沒有一種方法可以在大塊記錄上插入和刪除,而不必在同一個循環執行中查找它們兩次?有沒有更好的方法來確定WHILE語句何時完成?運行MS SQL Server 2000中SQL存檔腳本
這是我目前的程序(ISAdminDB是主要的DB,ISArchive是歸檔DB):
WHILE ((SELECT MIN([MyTable].[DateTime]) FROM [ISAdminDB].[dbo].[MyTable]) < DATEADD(d, -(3 * 365), GetDate()))
BEGIN
INSERT INTO [ISArchive].[dbo].[MyTable]
(<Fields>)
SELECT TOP 1000 (<Fields>)
FROM [ISAdminDB].[dbo].[MyTable]
WHERE
[MyTable].[DateTime] < DATEADD(d, -(3 * 365), GetDate())
AND UniqueID in (SELECT TOP 1000 UniqueID FROM [ISAdminDB].[dbo].[MyTable] ORDER BY [MyTable].[DateTime] ASC)
BEGIN TRAN
DELETE FROM [ISAdminDB].[dbo].[MyTable]
WHERE [MyTable].[DateTime] < DATEADD(d, -(3 * 365), GetDate())
AND (UniqueID in (SELECT TOP 1000 UniqueID FROM [ISAdminDB].[dbo].[MyTable] ORDER BY [MyTable].[DateTime] ASC))
COMMIT
END
哪個RDBMS? SQL Server,MySQL,別的東西? – MartW 2009-10-22 14:38:08
道歉,MS SQL Server 2000. – Kevin 2009-10-22 14:39:20
我猜SQL Server – MartW 2009-10-22 14:39:21