查询移动一些记录然后删除它们
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(非常欢迎提供提示)。
如果有任何提示和建议,我将不胜感激。提前致谢!
- 创建一个 table 变量或临时变量 table 来存储您要移动的记录的 ID 列表。
- 执行 INSERT 语句将记录从一个数据库复制到另一个数据库。
- 根据加入新数据库的临时 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
如果我的问题对你们中的一些人来说太简单了,我深表歉意。我是 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(非常欢迎提供提示)。
如果有任何提示和建议,我将不胜感激。提前致谢!
- 创建一个 table 变量或临时变量 table 来存储您要移动的记录的 ID 列表。
- 执行 INSERT 语句将记录从一个数据库复制到另一个数据库。
- 根据加入新数据库的临时 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