查询移动一些记录然后删除它们

Query to move some records and then delete them

如果我的问题对你们中的一些人来说太简单了,我深表歉意。我是 SQL 服务器的新手,我非常需要建议。我做了我的研究,但我仍然不确定如何继续,因为我读到的所有关于它的文章似乎都太笼统了。

我的任务是保持 table ABC(在服务器 1 上)没有超过 3 个月的记录。超过 3 个月的记录应该自动移动到服务器 2 上的 table ABC_ARCHIVE。处理和删除记录没什么大不了的,但我想自动检查记录在从服务器 1 删除它们之前已经在服务器 2 上。

我考虑过使用查询,我将在 SSIS 包中 运行,而后者又将在 SQL 服务器代理作业中 运行。如果您认为我应该采取不同的方式,请告诉我。我更愿意避免涉及任何不需要的组件。

对于 select 超过 3 个月的记录,我需要类似下面的查询:

Select *
From ABC
WHERE [CreateDate] <= DATEADD(mm, -3, GETDATE())

然后用 "delete" 代替 "select" 删除它们。

我应该在这两个查询之间写什么以确保行在删除之前确实已传输?如何在从服务器1删除记录之前自动检查记录是否已经在服务器2上?如果无法通过这种方式进行,能否请您提出替代解决方案?

我使用的是 Enterprise x64 版本并且我的帐户具有系统管理员权限。我对在 SQL Agent 中创建工作非常满意table,对 SSIS 也比较满意table(非常欢迎提供提示)。

如果有任何提示和建议,我将不胜感激。提前致谢!

  1. 创建一个 table 变量或临时变量 table 来存储您要移动的记录的 ID 列表。
  2. 执行 INSERT 语句将记录从一个数据库复制到另一个数据库。
  3. 根据加入新数据库的临时 table 中的 ID 从原始数据库中删除记录。

像这样使用临时 table 可以防止您在 getdate() 值不断变化时随时捕获不同的记录。

您使用 OUTPUT 子句进行如下操作:

这是一个使用 table 变量的工作示例:

DECLARE @t1 table(CreateDate datetime, col1 int, col2 int)
DECLARE @t2 table(CreateDate datetime, col1 int, col2 int)
INSERT @t1 values('2015-01-01', 1,1)
INSERT @t1 values('2016-01-01', 1,1)

DELETE
FROM @t1
OUTPUT deleted.CreateDate, deleted.col1, deleted.col2 into @t2
WHERE [CreateDate] <= DATEADD(mm, -3, GETDATE())

SELECT * FROM @t1

SELECT * FROM @t2