0

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

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

我考虑过使用一个查询,我将在 SSIS 包中运行该查询,该包又将在 SQL Server 代理作业中运行。如果您认为我应该对此有所不同,请告诉我。我宁愿避免涉及任何不需要的组件。

要选择超过 3 个月的记录,我需要如下查询:

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

然后用“delete”代替“select”来删除它们。

我在这两个查询之间写了什么以确保在删除它们之前确实传输了这些行?如何在从服务器 1 中删除记录之前自动检查记录是否已经在服务器 2 上?如果不可能这样做,您能否提出替代解决方案?

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

我将非常感谢任何提示和建议。先感谢您!

4

2 回答 2

4

您可以将OUTPUT子句用于以下操作:

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

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
于 2015-06-24T14:03:11.103 回答
1
  1. 创建一个表变量或临时表来存储您正在移动的记录的 ID 列表。
  2. 执行 INSERT 语句将记录从一个数据库复制到另一个数据库。
  3. 根据连接到新数据库的临时表中的 ID 从原始数据库中删除记录。

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

于 2015-06-24T14:00:34.103 回答