我的问题更多的是一个高级问题,而不是特定于技术。
我遇到的问题是我在数据库中插入了与机器对应的用户列表。当我这样做时,我不知道用户以前是什么,但我想删除数据库中与该计算机对应但不再是当前用户的用户。
我拥有的列表是该计算机的当前用户列表。有什么想法吗?
解决方案1:
这个解决方案的缺点是我们执行3个存储过程语句。 积极的是我们不必更改数据库。
解决方案2:
缺点是我们在每一行添加一个字段 积极的是这可能只有2个查询。
答案 0 :(得分:1)
从我的角度来看,最简单的解决方案是更改表,以便添加默认为当前时间的日期时间或时间戳,以及当前时间的更新更新。这样,当表被更改时,就会发生此更新。然后构建一个工作来运行每个X周期(每天,每周,每月等),以删除在某段时间内未更新的用户。
这使您可以最大程度地控制数据库,并在短时间内获得最准确的数据。
答案 1 :(得分:1)
保持简单。为什么不:
-- 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
更新了我的答案,以涵盖新机器和移除机器。将其全部包含在存储过程中。