0

对 TSQL 非常陌生...

我有下表称为“tblinit”:

Account_Num    UserID        Task_Percent
-----------    ------------  ------------
1              john.smith    0.75

我想更新下面“tblRaw”中的“任务百分比”值。

Account_Num    UserID        Task_Percent
-----------    ------------  ------------
1              john.smith    0.5
2              mary.mickle   0.9
3              don.donalds   1

我的计划是在插入“tblinit”时使用由触发器执行的 TSQL 存储过程。存储过程会将数据移动到“tblRaw”(合并或删除和插入),然后在过程完成后截断“tblinit”。tblInit 仅用于暂存传入数据。

已经阅读过 SCOPE_IDENTITY@@IDENTIY没有完全掌握这个概念。范围是否由执行存储过程的触发器定义?在尝试使用我自己的 SELECT 语句时SCOPE_IDENTITY@@IDENTITY我总是返回“NULL”结果。引用的 MSDN 文章似乎返回与文章示例中指定的数据不相关的主键。显然我读错了。我想获取刚刚插入的记录并在我的查询中使用它。

本质上,如何在插入时自动更新 john.smith 的新百分比值,或者如何完全添加新记录?

4

2 回答 2

2

如何在插入时自动更新 john.smith 的新百分比值

此触发器可用于执行以下操作:

create trigger tblinit_to_tblRaw
on tblinit
for insert
as
begin
    update r
    set r.Task_Percent = i.Task_Percent
    from inserted i
        join tblRaw r on i.UserID = r.UserID -- Join on Account_Num instead?
end

这不考虑新记录(tblRaw 中没有现有匹配项)。为此,您可能需要运行if exists(...merge.

于 2013-05-15T15:29:54.397 回答
1

鉴于您提到的各种概念,我必须承认对您的意图有些困惑。

如果您想在更新/删除中触发触发器后从原始表中删除,那么您做错了。

如果您出于性能原因只想在另一个表中保留运行总计,请查看“索引视图”。

如果您想在一个表中添加一些内容,然后更新另一个表并从原始表中删除,那么您要么在寻找一个队列,要么只是一个存储过程来在适当的表上执行更新。您不需要使用触发器和其他东西执行复杂的步骤。

不知道身份的东西来自哪里。很确定你在这里不需要它。

我认为你让它变得比它需要的更复杂。

我可能是错的 - 请随时详细说明。

于 2013-05-15T15:19:28.287 回答