我將創建更新觸發器。此觸發器的用途是,如果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