CREATE PROCEDURE dbo.ArchiveData
(@CutOffDate datetime = NULL)
AS
BEGIN
SET NOCOUNT ON
IF @CutOffDate IS NULL
BEGIN
SET @CutOffDate = DATEADD(mm, -6, CURRENT_TIMESTAMP)
END
ELSE
BEGIN
IF @CutOffDate > DATEADD(mm, -3, CURRENT_TIMESTAMP)
BEGIN
RAISERROR ('Cannot delete orders from last three months', 16, 1)
RETURN -1
END
END
BEGIN TRAN
INSERT INTO Archive.dbo.Orders
SELECT *
FROM dbo.Orders
WHERE OrderDate < @CutOffDate
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RAISERROR ('Error occurred while copying data to Archive.dbo.Orders', 16, 1)
RETURN -1
END
INSERT INTO Archive.dbo.OrderDetails
SELECT *
FROM dbo.OrderDetails
WHERE OrderID IN (SELECT OrderID
FROM dbo.Orders
WHERE OrderDate < @CutOffDate)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RAISERROR ('Error occurred while copying data to Archive.dbo.OrderDetails', 16, 1)
RETURN -1
END
DELETE dbo.OrderDetails
WHERE OrderID IN (SELECT OrderID
FROM dbo.Orders
WHERE OrderDate < @CutOffDate)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RAISERROR ('Error occurred while deleting data from dbo.OrderDetails', 16, 1)
RETURN -1
END
DELETE dbo.Orders
WHERE OrderDate < @CutOffDate
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RAISERROR ('Error occurred while deleting data from dbo.Orders', 16, 1)
RETURN -1
END
IF @@TRANCOUNT > 0
BEGIN
COMMIT TRAN
RETURN 0
END
END
Как архивировать все таблицы одновременно в одной хранимой процедуре для архивирования таблиц? Мне нужно хранить последние 30 дней в обычных таблицах, но архивировать все прошлые данные в архив. Нужно ли пользоваться условием If Else? Мне нужно динамически получить все таблицы и динамически архивировать таблицы. Мне нужно использовать Dynami c SQL запросов для этого.