0

我有两张表:
一张用于活动用户,另一张用于非活动用户。两者都有用户的全名和他的电子邮件地址。我希望只有在两个表中都不存在新用户(例如他的电子邮件地址)时才能插入新用户。如果他存在于非活动表中,我将通过将用户从非活动表移动到活动表来重新激活他。

有没有办法通过尝试插入某种查询并在他存在时捕获异常,而不是通过在插入之前检查用户是否存在来做到这一点?

4

2 回答 2

2

仅仅因为你的数据很大并不意味着你应该把它一分为二,这会让你很头疼。您不仅会在 CRUD 操作中遇到麻烦,而且在将表链接到其他表时也会遇到麻烦。您绝对应该有一个表和一个布尔字段来指示用户是活动的还是非活动的。

为了依次处理大数据和查询的速度,您可以采取其他操作,例如分区

Ps:您正在尝试做的是以某种方式重新发明分区。

于 2013-04-11T14:26:16.673 回答
0

通过捕获异常来实现条件逻辑是一种低效的设计。您最好先检查一下电子邮件地址是否存在于任一表中:

IF EXISTS (SELECT 1 FROM InactiveUsers WHERE Email = @new_email)
    BEGIN
    INSERT INTO ActiveUsers ...
    DELETE FROM InactiveUsers ...
    END
IF NOT EXISTS (SELECT 1 FROM ActiveUsers WHERE Email = @new_email)
    INSERT INTO ActiveUsers...
于 2013-04-11T14:11:02.303 回答