繁体   English   中英

数据库删除旧条目

[英]Database removal of old entries

我的问题更多是高级问题,而不是特定于技术的问题。

我的问题是我要在数据库中插入与计算机相对应的用户列表。 当我这样做时,我不知道以前是什么用户,但是我想删除数据库中与该计算机相对应但不再是当前用户。

我拥有的列表是该计算机的当前用户列表。 有任何想法吗?

解决方案1:

  1. 查询数据库以获取与计算机对应的用户列表。
  2. 与当前列表进行比较,并构建一个删除列表和一个添加列表。
  3. 执行删除
  4. 执行添加

该解决方案的缺点是我们执行了3个存储过程语句。 积极的是,我们不必更改数据库。

解决方案2:

  1. 将用户时间戳字段添加到表中。
  2. 在更新时间戳字段时,运行添加所有用户。
  3. 执行新的存储过程,以删除与更新时间小于现在的计算机对应的所有用户。

缺点是我们向每行添加一个字段。
肯定的是,这可能只有2个查询。

从我的角度来看,最简单的解决方案是更改表,以便添加默认为当前时间的datetime或时间戳,并在更新时更新为当前时间。 这样,当更改表时,就会发生此更新。 然后构建一个作业,使其每隔X个周期(每天,每周,每月等)运行一次,从而删除某个时期未更新的用户。

这使您可以在短时间内最大程度地控制数据库,并获得最准确的数据。

把事情简单化。 为什么不:

-- Add any new machines
INSERT [Table] (MACHINE, [USER]) 
SELECT MACHINE, [USER] FROM Query Q WHERE NOT EXISTS(SELECT * FROM [Table] T WHERE T.MACHINE = Q.MACHINE)

-- Delete any removed machines
DELETE [Table] WHERE Machine NOT IN (SELECT Machine FROM Query)

-- Update any changed machines
UPDATE
  A
SET
  A.CoName = B.CoName
  --SELECT *
FROM
  Cust A 
  JOIN (SELECT CustID, CoName FROM Cust) B 
    ON A.CustID = B.CustID AND A.CoName <> B.CoName

更新了我的答案以涵盖新机器和已移除机器。 将所有内容包装在存储过程中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM