none
Update ve Insert Trigger Hakkında RRS feed

  • Soru

  • Birbiriyle aynı yapıda iki tablo var farklı databaseler üzerinde.

    A database ye ait X tablosu

    B database ye ait Y tablosu.

    X ve Y birbiriyle tamamen aynı. X tablosu üzerinde çalışan INSERT ve UPDATE triggerlarım ekleme ve güncelleme işlemlerinin aynısımı Y tablosu üzerine yapıyorlar.

    Eski ama halen kullanılan Envanter Otomasyonumuz A Database indeki X tablosunu kullanıyor.

    Yazdığım Yeni Envanter Otomasyonuda B database indeki Y tablosunu. Maksadım orjinal tabloya zarar vermeden onun üzerinde çalışma yapmadan kopya datalar üzerinde çalışmak.

    Fakat sıkıntı şu ki Insert ve Update Triggerlarım X tablosu üzerinde çalıştığı sürece Eski Envanter Programımız Çalışmıyor. Yani INSERT ve UPDATE işlemlerini yapamıyor. Bende o yüzden şimdilik kaldırdım. İşleyişi aksatmamak için.

    Eski yazılımcı tarafından tasarlanan X tablosu tam bir fiyasko. Ben bilgileri Y tablosuna çekerek oradan farklı tablolara aktarımlar ve ilişkilendirmeler yapıyorum. Yani Y tablosu benim Veri Toplama Yerim. Güncelliğinide korumak zorunda çünkü yeni programın da tablolara dağıtım yapan kaynağı bura.

    Şimdi yazdığım INSERT ve UPDATE triggerlarını size göstereyim programın Ekleme ve Güncelleme yapamamasının nedenleri triggerdan mı yoksa programsal bir şey mi bana fikirlerinizi söyleyebilir misiniz?

    USE [Orgdata]
    GO
    /****** Object:  Trigger [dbo].[DemirbasTakipForInsert]    Script Date: 12/07/2014 18:20:13 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[DemirbasTakipForInsert] ON [dbo].[DEMIRBAS]
    FOR INSERT AS
    BEGIN
    INSERT INTO 
    BilgisayarTakip.dbo.OrganizeKarmaBilgi
    (
    DemirbasNumarasi,SeriNumarasi,Markasi,Modeli,MalzemeAdi,MalzemeBurosu,Aciklama,ZimmetliPersonelAdSoyad,ZimmetliPersonelSicil,ZimmetTarihi,EnvanterGirisTarihi,EnvanterKaynagi,
    DepoyaKaldirilisTarihi,DepoNedeni,DepoAciklama
    )
    SELECT
    DEMIRBAS_NO,SERI_NO,MARKASI,MODELI,MALZEME_ADI,BUROSU,ACIKLAMA,ADI_SOYADI,SICILI,ZIMMET_TARIHI,KAYIT_TARIHI,KAYNAK,ARSIV_TARIHI,ARSIV_DURUMU,ARSIV_ACIKLAMA
    FROM INSERTED 
    END

    USE [Orgdata]
    GO
    /****** Object:  Trigger [dbo].[DemirbasTakipForUpdate]    Script Date: 12/07/2014 18:20:17 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[DemirbasTakipForUpdate] ON [dbo].[DEMIRBAS]
    FOR UPDATE AS
    BEGIN
    
    DECLARE @UrunSeri varchar(max)
    SELECT @UrunSeri=SERI_NO FROM DELETED
    
    DECLARE @YeniSeriNumarasi varchar(max)
    SELECT @YeniSeriNumarasi=SERI_NO FROM INSERTED
    
    UPDATE BilgisayarTakip.dbo.OrganizeKarmaBilgi SET SeriNumarasi=@YeniSeriNumarasi WHERE SeriNumarasi=@UrunSeri
    
    
    
    END


    • Düzenleyen HasanYaman 7 Aralık 2014 Pazar 20:34
    7 Aralık 2014 Pazar 16:36

Tüm Yanıtlar

  • Aklıma şöyle bir şey geldi;

    TransAction işlemine Triggerlarda dahil sonuçta. Eski program Sql den bir output değer geri döndürmek isterken Trigger devreye girip bunu mu kesiyor acaba?

    Mantıklı mı söylediğim şey yada böyle bir şey varsa nasıl engelleyebilirim bunu?

    7 Aralık 2014 Pazar 16:47
  • Aklima gelen diger programin scope_identity() gibi bir sey kullandigi.

    Tamamen ayniysa ve sen insert, delete, update yapmiyorsan onu kullan. 

    7 Aralık 2014 Pazar 21:55
  • Yok hocam yapmıyorum. Aslında ilk niyetim o database kullanmaktı.

    Using içinde 2 sqlconnection yaptım duruma göre birini açıp birini kapadım. Ama yanlış kullanımdan heralde hatalar aldım. Bende vazgeçip trigger kullanımına yöneldim.

    Büyük bir ihtimalle scope identity dediğiniz gibi. Çünkü o anda inserted tablosunu kullanacak eski tabloya ait bir trigger yok.

    Ben biraz araştırdım ama Multiple SqlConnection hakkında sağlıklı kaynaklar göremedim. Siz önerebilir misiniz?

    (Ayrıca hocam geçen günkü konuyla ilgili mail attım size bilginiz olsun.)

    7 Aralık 2014 Pazar 22:55