我必须创建一个 SQL 查询(由 SQL Server 中的 sqlcmd.exe 运行的 .sql 文件)来删除超过一定天数的所有记录。但是,我发现自己对如何绕过外键约束感到困惑。为了说明问题,这里有三个具有相似关系的表(注意这是伪代码):
CREATE TABLE runlog(
row_id int identity(1,1) NOT NULL,
run_id nvarchar(25) NULL FOREIGN KEY REFERENCES status(run_id),
master_id nvarchar(25) NULL FOREIGN KEY REFERENCES master(master_id),
)
CREATE TABLE status(
run_id nvarchar(25) NOT NULL,
master_id nvarchar(25) NULL FOREIGN KEY REFERENCES master(master_id),
status_date datetime NULL,
)
CREATE TABLE master(
master_id nvarchar(25) NOT NULL,
)
通常删除是按 runlog、status、master 的顺序完成的——但我需要确定记录在状态表中的年龄的字段。所以我不能在主表之前从逻辑上删除状态表,但我也不能反过来做。对于运行日志表,我可以使用它:
delete from runlog
inner join status on status.run_id = runlog.run_id
where status.status_date <= DATEADD(DAY, -30, GETDATE())
要选择需要的 master_id,我可以使用:
select master_id from status
where status.status_date <= DATEADD(DAY, -30, GETDATE())
然后,如果有一种方法可以缓存此列表,我可以使用它从状态中删除列表,然后从 master 但没有新的存储过程,我不知道该怎么做。有什么建议么?