0

很新的TSQL选择数据...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 

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

I have read aboutSCOPE_IDENTITY and @@IDENTIY但是没有完全理解这个概念。执行存储过程的触发器是否定义了范围?在尝试使用SCOPE_IDENTITY@@IDENTITY我自己的SELECT语句时,我总是返回一个“NULL”结果。引用的MSDN文章似乎返回与文章示例中指定的数据无关的主键。很显然,我正在阅读错误的东西。我想抓取刚刚插入的记录并将其用于查询。

从本质上说,我怎么上插入自动更新和John.Smith新的百分比值,或者,如何添加一个新的记录完全?

回答

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

鉴于您提到的各种概念,我必须承认您的意图有点混乱。

如果你想在该更新程序触发闪光后从原始表中删除/删除,那么你就错了。

如果你只是想运行总保持在另一台性能方面的原因,然后检查了“索引视图”。

如果你想要的东西添加到一个表,然后更新另一个从原来的删除,那么你要么寻找一个队列或只是一个存储过程来对相应的表进行更新。你不需要用触发器和东西来做复杂的步骤。

不知道IDENTITY的东西来自哪里。很确定你不需要这里。

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

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

+0

我想你可能是对的!我正在使用SharePoint中的Web服务的INSERT语句...也许我应该调查MERGE语句而不是INSERT并转储中间表? – Shrout1

相关问题