首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以使用而不是使用更新触发器对外键字段执行部分级联更新吗?

我可以使用而不是使用更新触发器对外键字段执行部分级联更新吗?
EN

Stack Overflow用户
提问于 2022-07-04 07:43:25
回答 1查看 62关注 0票数 -2

挑战在于,当我更改我的一家零售商店的名称时,我想要的是销售表:

RetailName保留已删除的名称(我指的是已更改的名称),用于记录前几个月的销售日期,并将RetailName保留为本月开始的新插入的记录名称。这样做的原因是,将来我在搜索销售表时,会使用零售名称,而不是新名称,也是出于其他原因。

我想使用表MyRetails上的替换更新触发器来复制记录并将重复记录上的RetailName值更改为新RetailName,而不是当用户尝试更新它时更新它,然后使用相同的触发器通过Sales表循环,以便将外键RetailName更改为本月销售日期=的记录的新创建的RetailName,但不幸的是,我无法为此编写T。。。另外,为了将一个零售的两个名称联系起来,而不是混淆为两个零售商店,我想添加一个字段,其中包含将2条记录分类在一起的值。

有人能帮忙解决这个问题吗?

NB:并不奇怪为什么我使用RetailName作为PK而不是RetailID,因为某些原因,它应该是那样的。

EN

回答 1

Stack Overflow用户

发布于 2022-07-04 08:47:58

我会为你提供一个答案,但让我先澄清:

您选择RetailName而不是某些ID的原因是错误的,而将来可能会为该选择付出高昂的代价。

但人们有时需要努力学习,所以这里说:

你的想法(除了前面的几点)是健全的。不过,不需要使用替代触发器;事后触发器可以正常工作。添加一个字段来连接它们似乎是合理的,让我们称它们为MyRetailsGroup并填充它:

代码语言:javascript
复制
alter table [MyRetails] add [MyRetailsGroup] nvarchar(100) -- or whatever datatype [RetailName] is
update MyRetails set [MyRetailsGroup]=[MyRetails]

扳机看起来应该是这样的:

代码语言:javascript
复制
create or alter trigger TR_MyRetails_update_PK on [MyRetails]
after update as
begin
    if update([RetailName]) -- only run for primary key change
    begin
    
        -- create new rows for previous PK
        insert [MyRetails]([RetailName],[Description],[MyRetailsGroup])
            select 
                d.[RetailName],d.[Description],d.[MyRetailsGroup]
            from deleted d
                
        -- save previous and next PK to temp table
        select d.[RetailName] as [original],i.[RetailName] as [new]
        into #mr
        from
            inserted i
            inner join deleted d on i.[RetailName]=d.[RetailName]
            
        -- now do your business stuff with those pairs
        update sales set [RetailName]=mr.[new]
        from
            [Sales] sales
            inner join #mr mr on mr.[original]=sales.[RetailName]
        where sales.[Date] >= DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0) -- this month onward
        
        ......
    end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72853283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档