2012-12-24 11 views
6

ile sildi Nedense tam olarak ihtiyacım olan cevabı bulamıyorum. Son 20 dakika içinde aradım.INSERT değerlerini bir tabloya SİLME TETİKLİ DELETE TETİKLENDİRİCİ

Bunun basit olduğunu biliyorum. Çok basit. Ama iki sütun

dbo.HashTags

|__Id_|_name_| 
| 1 | Love | 

başka bir tabloya silinen değerleri eklemek istediğiniz ile

Ben bir tablo var .. nedense tetiği ateş edemez DELETE sorgusunda dbo.HashTagsArchive denir.

Örnek:

ALTER TRIGGER [dbo].[HashTags_BeforeDelete] 
    ON [dbo].[HashTags] 
    FOR DELETE 
AS 
    BEGIN 
    INSERT INTO HashTagsArchive 
    (Id, 
    HashTagId, 
    delete_date) 
    SELECT d.Id, m.HashTagId,GETUTCDATE() FROM deleted d 
    JOIN dbo.HashTags m ON m.Id=d.Id 
    DELETE FROM dbo.HashTags 
    WHERE ID IN(SELECT deleted.Id FROM deleted) 
    END 
GO 

: bu tetiği güvenilir bir dbo.HashTagsArchive silinen satır ve Id=1 ile satır olmalıdır Bu örnekte sonra

DELETE FROM [dbo].[HashTags] WHERE Id=1 

dbo.HashTags

silinmesi gerekmektedirnumaralı telefondan Deleted oluyor ama Inserted numaralı satır yok 0

cevap

12

Sizin sorundur: silme zaten oldu bu tetikleyici harekete SONRA. Yani, katılabileceğin HashTags'da başka satır yok! Ayrıca

... şey üzerinde katılmak için gerek -

ALTER TRIGGER [dbo].[HashTags_BeforeDelete] 
    ON [dbo].[HashTags] 
    FOR DELETE 
AS 
    BEGIN 
    INSERT INTO HashTagsArchive(Id, HashTagId, delete_date) 
     SELECT 
      d.Id, d.HashTagId, GETUTCDATE() 
     FROM deleted d 
    END 
GO 

Deleted sözde tablo silindi tüm satır (lar) içerir:

Bunun yerine bu tetiği kullanmak gerekir : Bu tetikleme, silme gerçekleştikten sonra patlar - böylece, kendiniz, tetikleyicinin içinde herhangi bir şey yapmanıza gerek kalmaz - sadece bu bilgi parçalarını arşiv tablonuza eklersiniz - hepsi budur. Diğer her şey sizin için SQL Server tarafından ele alınır.

+0

Teşekkürler! Mükemmel çalışıyor! – Ofear

İlgili konular