我试图将记录从数据库中的表存档到存档数据库中的相同表。我需要能够为日期大于三年前的所有记录执行插入操作,然后删除这些行。但是,这张表拥有数百万条实时的记录,所以我想一次运行大约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