【发布时间】:2020-03-20 17:39:30
【问题描述】:
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 条件吗?我需要动态获取所有表并动态归档表。我需要为此使用动态 SQL 查询。
【问题讨论】:
标签: sql sql-server tsql azure-sql-database dynamic-sql