首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server触发器未正确触发

SQL Server触发器未正确触发
EN

Stack Overflow用户
提问于 2010-11-25 06:11:02
回答 3查看 553关注 0票数 2

我有一个触发器,我认为只有当其中一列被更新时才会更新,而不是表。有没有办法重写它,使其只在指定的列更新时触发,而不是表中的其他字段更新

代码语言:javascript
复制
CREATE TRIGGER [afm].[afm_rm_dwgs_t] ON [afm].[rm] 
   FOR UPDATE
AS
   IF (UPDATE(area) OR UPDATE(dv_id) 
   OR UPDATE(dp_id) OR UPDATE(rm_cat) 
   OR UPDATE(rm_type) OR UPDATE(rm_std))
   BEGIN
      SET NOCOUNT ON;
      UPDATE afm.afm_dwgs 
      SET dwg_updt = 1 
      WHERE afm_dwgs.dwg_name IN (SELECT dwgname FROM inserted)
   END
EN

回答 3

Stack Overflow用户

发布于 2010-11-25 06:16:23

不会,触发器在afm.rm上被定义为FOR UPDATE,因此它将始终在该表上的每次更新时触发。没有办法预先限制这一点。

您在触发器内部的检查将消除任何“多余的”触发器激活,使其不会实际执行任何操作。

票数 1
EN

Stack Overflow用户

发布于 2010-11-25 06:16:32

假设您想检查area列是否已更新,则代码将如下所示:

代码语言:javascript
复制
declare @oldArea varchar(50)
declare @newArea varchar(50)

select @oldArea= area from deleted
select @newArea=area from inserted

if ( @oldArea <> @newArea)
-- area is updated
票数 1
EN

Stack Overflow用户

发布于 2010-11-25 06:19:04

UPDATE()只表示该列包含在数据集中。它没有表示底层数据是否不同。

你将不得不变得更复杂一点。

您需要比较删除的值和插入的值,以查看是否有更改。

有关更多信息,请查看this link

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4271984

复制
相关文章

相似问题

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