How is this?
Can you see how it could be Improved?
DECLARE @NextIDs TABLE(UniqueID int primary key)
DECLARE @ThreeYearsAgo datetime
SELECT @ThreeYearsAgo = DATEADD(d, -(3 * 365), GetDate())
WHILE EXISTS(SELECT 1 FROM [ISAdminDB].[dbo].[MyTable] WHERE [MyTable].[DateTime] < @ThreeYearsAgo)
BEGIN
BEGIN TRAN
INSERT INTO @NextIDs(UniqueID)
SELECT TOP 1000 UniqueID FROM [ISAdminDB].[dbo].[MyTable] WHERE [MyTable].[DateTime] < @ThreeYearsAgo
INSERT INTO [ISArchive].[dbo].[MyTable] (<Fields>)
SELECT (<Fields>)
FROM [ISAdminDB].[dbo].[MyTable] AS a
INNER JOIN @NextIDs AS b ON a.UniqueID = b.UniqueID
DELETE [ISAdminDB].[dbo].[MyTable]
FROM [ISAdminDB].[dbo].[MyTable]
INNER JOIN @NextIDs AS b ON a.UniqueID = b.UniqueID
DELETE FROM @NextIDs
COMMIT TRAN
END
For better, quicker answers on T-SQL questions, click on the following...
http://www.sqlservercentral.com/articles/Best+Practices/61537/
For better answers on performance questions, click on the following...
http://www.sqlservercentral.com/articles/SQLServerCentral/66909/