【问题标题】:Trigger is Not Updating current Month Deatils?触发器未更新当前月份详细信息?
【发布时间】:2013-08-15 08:40:02
【问题描述】:

我有一个名为Table_Lookup 的表,它每周都会更新。因此,我在该表上创建了 2 个triggers,如果插入新记录,触发器将触发并将新数据插入另一个名为Table_Lookup_Change 的表中。

注意:我在Table_Lookup 中有截至 8 月的数据,但是当触发触发器时,它只插入截至 7 月的数据,它缺少一个月的数据。我从过去两周开始工作,我无法弄清楚问题所在。你们能看看我的代码吗..

【问题讨论】:

  • on ... and A.FLMNet = B.FLMNet Where A.FLMNet is not null ... and B.FLMNet is null and A.FLMNet is not null 是一个有趣的结构。提示:使用有帮助的表别名,例如from deleted as d left join MediaFactor_Lookup_Change as MFLC.
  • deleted as d left join MediaFactor_Lookup_Change B ...我已经给了别名B

标签: sql sql-server tsql triggers


【解决方案1】:

你的触发器有结构

if (exists(select 1 from deleted))
begin
   .
   .
end
else
begin
   .
   .
end

因为您有deleted(旧值)和insert(新值,包括那些通过UPDATE 修改的值)。

你需要做的是像

if (exists(select 1 from deleted))
begin
   .
   .
end

if (exists(select 1 
           from inserted 
           left join deleted on inserted.MediaFactor_ID = deleted.MediaFactor_ID
           where deleted.MediaFactor_ID
   )
begin
   /*update or insert as needed. filtering out those from deleted table*/

end

【讨论】:

  • 我无法得到您的答案,请您详细说明一下。
  • 我假设您是触发器的新手,请查看 [this](msdn.microsoft.com/en-us/library/ms191300.aspx) 之类的一些文章,或者只需 google 一下 SQL 插入删除 trigger 的执行有两个特殊的表,inserteddeleted 新行在插入表中,更新期间新分配的值也在插入表中。更新的原始行和删除的行都在删除的表中。如果您查看您发布的触发器,您会发现您已经在使用这些表。
  • 是的,我是触发器的新手,我从未使用过它们,我可能会在 UDF 和存储过程上工作。你能给我一个建议,如何在上面的触发器中进行操作吗?
  • 我的一天要结束了。只需在谷歌上搜索SQL triggers inserted deleted,您就会发现大量的材料,然后看看您的跳跳虎,您会发现这些桌子并没有那么可怕。
  • 是的,表格并不可怕。但是错误很可怕:(
【解决方案2】:

if (exists(select 1 from deleted)) 开始 . . 结束

如果(存在(选择 1 从插入 在插入时删除左连接。MediaFactor_ID = deleted.MediaFactor_ID Where A.FLMNet 不为空 而 B.Media 为空 B.Year 为空 B.Month 为空 并且 B.Factor 为空 并且 B.FLMNet 为空 并且 A.FLMNet 不为空) ) 开始 /根据需要更新或插入。从已删除的表中过滤掉那些/

结束

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多