0

我有一个包含 3 个表的数据库,我正在更新第一个表中的一行,然后尝试根据对第一个字段的更改来更新第二个和第三个表。

这是我目前拥有的:

--Session--
User   Hotspot   DownloadCounter
bob    123       0              

--UserDownload--
User     Download
bob      100   

--HotspotDownload--
Hotspot  Download 
123      300 

目前,当我从热点获取更新时,我用最新的流量计数器值更新会话表,但是我现在想用新的 DownloadCounter(旧的 DownloadCounter)的值更新 UserDownload 和 HotspotDownload 表。

我认为通过以下过程很容易做到这一点:

DECLARE increment INT;

UPDATE Session
    SET @increment  = (200 - Counter),
    Counter = 200
    WHERE (User = 'bob' AND Circuit = '123');

UPDATE UserDownload
    SET Total = (Total + @increment)
    WHERE  (User = 'bob');

UPDATE HotspotDownload
    SET Total = (Total + @increment)
    WHERE  (Circuit = '123');   

我的想法是更新会话表并将计数器更改值分配给一个变量,然后在更新下载表时使用该变量。但是 '@' 在过程中会导致语法错误,并且没有 '@' 它认为增量是一个列,所以失败了。

如果总表中没有用户/热点的条目,我仍然需要更新会话表。

我尝试使用单个更新和左连接来执行此操作,但这导致首先更新 Sessions 表列,因此不会更新下载表。

是否可以将列上的计算结果分配给更新中的变量,然后在过程中的另一个更新中使用该更新?

谢谢。

4

1 回答 1

0

好的,看起来这样做的方法是触发器。

让程序只更新 Session 表,然后对在实际更新之前运行的表触发并更新第二个和第三个表。

于 2013-04-24T21:44:12.047 回答