当另一个表被更新时触发更新同一表中的值

时间:2018-12-03 13:35:37

标签: sql sql-server

我是SQL初学者的新手,并且通过它学习了我的方法。

当同一行的另一个值被编辑时,我需要能够更新表中的值。

我目前有这个。

USE [DBNAME]
GO
/****** Object:  Trigger [dbo].[distval1]    Script Date: 03/12/2018 13:22:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create TRIGGER [dbo].[distval3]
ON [dbo].[ZID00181]
AFTER INSERT  
AS 
BEGIN



IF UPDATE(supplier_code) 
  begin

update ZID00181
  set Distribution_Value = '200'
  where Supplier_Code like '2%'


  --set Distribution_Value = branch_plant 
  --where supplier_code like '4%'

  end

END

因此,基本上,当供应商代码以2开头时,它会设置分配值。

初次导入时似乎无法正常工作,但是如果先导入null并随后对其进行更新,则无法正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要将触发器更改为“ AFTER INSERT,UPDATE”。 另外,我相信您只想在同一行中的vendor_code更改时才更新“ Distribution_Value”。因此,您的更新适用于与“ 2%”之类的Supplier_Code匹配的整个表。如果您只想更新已更新的行,则需要执行以下操作:

CREATE TRIGGER [dbo].[distval3]
ON [dbo].[ZID00181]
AFTER INSERT, UPDATE
AS 
BEGIN

IF UPDATE(supplier_code) 
  BEGIN
    UPDATE ZID00181
      SET Distribution_Value = '200'
      WHERE Supplier_Code like '2%'
      AND ZID00181.<PRIMARY KEY HERE> IN (SELECT <PRIMARY KEY HERE> FROM INSERTED)
      --set Distribution_Value = branch_plant 
      --where supplier_code like '4%'
  END
END