2015-06-24 54 views
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()) 

那么同样一个与地方的“选择”将其删除“删除”。

我在这两个查询之间写入什么内容以确保行在删除之前确实被传输?在从服务器1中删除记录之前,如何自动检查记录是否已在服务器2上?如果不可能这样做,你能否建议替代解决方案?

我正在使用Enterprise x64版本,而且我的帐户具有系统管理员权限。我非常适合在SQL Agent中创建工作,并且适合SSIS(提示非常受欢迎)。

我会很感激任何提示和建议。先谢谢你!

回答

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

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