我将创建更新触发器。此触发器的用途是,如果muadurum列已更改,请将表中的旧值mua_tarih插入表fkayitlar并插入到另一个表mua_tarihleri。用于更新的MSSQL触发器仅工作一次
我的代码块喜欢;
ALTER TRIGGER [dbo].[trgr_fkayit_update]
ON [dbo].[fkayitlar]
AFTER UPDATE
AS
DECLARE @mua_durum_once NVARCHAR(10)
DECLARE @mua_durum_sonra NVARCHAR(10)
DECLARE @mua_tarih_once DATE
DECLARE @mua_yapan_once NVARCHAR(25)
DECLARE @kisi_id INT
取旧值;
SELECT
@kisi_id=kayitid,
@mua_durum_once=muayenedurum,
@mua_tarih_once=muayenetarih,
@mua_yapan_once=mua_yapan
FROM deleted
取新值;
SELECT @mua_durum_sonra=muayenedurum FROM inserted
检查值是否改变;如果改变,插入@mua_tarih表mua_tarihleri与@kisi_id和@mua_yapan_once
IF @mua_durum_once='OLDU'
AND @mua_durum_sonra='OLMADI'
AND @mua_tarih_once IS NOT NULL
BEGIN
INSERT INTO mua_tarihleri(kayitid,mua_tarihi,mua_yapan)
VALUES(@kisi_id,@mua_tarih_once,@mua_yapan_once)
END
我的问题是当我在表fkayitlar更新多行,触发工作,但我只看到一张插入的行在表mua_tarihleri(仅工作一次)。我需要看到不止一个(应该不止一次地工作)触发器是否在多个进程上工作?或我该如何解决这个问题?
当表被更新,无论有多少行是如何更新触发只发生一次。因此,你必须编写你的触发器体来操作一组行,而不是像你所做的那样对一行进行操作。 –
“已删除”是一个虚拟表,即可以包含多行。删除三行的单个删除语句会使触发器中的“已删除”表有三行。考虑到这一点,你应该很好。 –
@ƉiamondǤeezeƦ**更新fkayitlar SET muayenedurum ='OLMADI',muayenetarih = NULL在哪里GETDATE()> periyodiktarih **当我运行这个查询时,多于一行受到影响,并且它们都必须插入表中** mua_tarihleri * *但它不能工作:( – BozkurtFuat