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仅用于暂存传入数据。
我have read about SCOPE_IDENTITY
和@@IDENTIY
但未完全掌握这一概念。范围是由执行存储过程的触发器定义的吗?在使用SCOPE_IDENTITY
和@@IDENTITY
尝试我自己的SELECT语句时,我总是以“NULL”结果返回。引用的MSDN文章似乎返回了与文章示例中指定的数据无关的主键。显然,我正在读错误的东西。我想抓住刚刚插入的记录并在我的查询中使用它。
从本质上讲,如何在插入时自动更新john.smith的新百分比值,或者如何完全添加新记录?
答案 0 :(得分: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
。
答案 1 :(得分:1)
鉴于您提到的各种概念,我必须承认对您的意图有点困惑。
如果你想在更新/删除触发器触发后从原始表中删除,那么你做错了。
如果您只是出于性能原因想要在另一个表中保留一个运行总计,请查看“索引视图”。
如果要向一个表添加内容然后更新另一个表并从原始表中删除,那么您要么是在寻找队列,要么只是一个存储过程来在适当的表上执行更新。你不需要用触发器和东西做复杂的步骤。
不知道IDENTITY的来源在哪里。很确定你在这里不需要它。
我认为你使它变得比它需要的更复杂。
我可能错了 - 随意详细说明。