Şimdi Ara

SQL TRIGGER HAKKINDA SORU

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
10
Cevap
0
Favori
836
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arac, Musteri ve Araç kiralama adında 3 tablom var.

    Stored procedure ile müşteri bilgilerini giriyor. Aracını seçiyor. Tarihleri seçiyor. Seçtiği bilgileri AraçKiralama tablosuna aktarıyor. Kiralanan aracın idini alabiliyorum ama musteri_id yi Arac kiralama tablosuna aktaramıyorum. Musteri id her girişte otomatik artıyor. Trigger ile aktarmayı denedim. Bu seferde Arac_id yi NULL döndürüyor hatası alıyorum. Halbuki araç id seçiliyor. İki tane procedur oluşturdum. Birisi müşteri bilgilerini diğeri de araç bilgilerini alıyor.

    Nasıl bir çözüm bulmak gerekir ?



    < Bu mesaj bu kişi tarafından değiştirildi cllyldrm -- 29 Aralık 2013; 17:50:38 >



  • Aktarmak istedigin yerdeki alan aynı cinsdemi diger tablo ile.
  • Ekleme yapmak istedigin tabloda IDENT_CURRENT('ID is alınıcak tablo ismi')
  • quote:

    Orijinalden alıntı: fsh77

    Ekleme yapmak istedigin tabloda IDENT_CURRENT('ID is alınıcak tablo ismi')

    Evet alan cinsleri aynı. Tek bir prosedürde iki tane insert işlemi olur mu acaba . En sonki triggerda şöyle bir durum oluştu. Bu iki satır aynı yerde olması lazım ama farklı yerlere atıyor.

     SQL TRIGGER HAKKINDA SORU


    Müşteri bilgilerini aldığım prosedür
    CREATE PROCEDURE MUSTERIBILGILERIAL 
    @Musteri_isim varchar(50) ,
    @Musteri_tel nchar(10) ,
    @Musteri_email varchar(50) ,
    @Musteri_ehliyet_id int ,
    @Musteri_adres varchar(500) ,
    @Musteri_soyisim varchar(100)
    AS BEGIN
    INSERT INTO Musteri(Musteri_isim, Musteri_tel, Musteri_email, Musteri_ehliyet_id, Musteri_adres, Musteri_soyisim) VALUES(@Musteri_isim, @Musteri_tel, @Musteri_email, @Musteri_ehliyet_id, @Musteri_adres, @Musteri_soyisim)
    END


    Kiralamabilgilerini aldığım prosedür.
    CREATE PROCEDURE ARACBILGILERIAL 
    @Arac_id int,
    @Baslangic_tarihi date ,
    @Bitis_tarihi date
    AS BEGIN
    INSERT INTO AracKiralama (Arac_id, Baslangic_tarihi, Bitis_tarihi) VALUES(@Arac_id,@Baslangic_tarihi, @Bitis_tarihi)
    END


    Trigger ım.
    CREATE TRIGGER musteriidekle 
    ON Musteri
    AFTER INSERT, UPDATE
    AS BEGIN
    SET NOCOUNT ON
    DECLARE @Musteri_id int
    SELECT @Musteri_id = Musteri_id FROM INSERTED

    INSERT INTO AracKiralama(Musteri_id) VALUES (@Musteri_id)
    END




  • Trigger gerek yok, sen tablo ID si icin sadece verdigim fonksiyonu kullan kafi.
  • quote:

    Orijinalden alıntı: fsh77

    Trigger gerek yok, sen tablo ID si icin sadece verdigim fonksiyonu kullan kafi.

    Hata veriyor. Trigger kullanmadım ama kullandığım hatayı veriyor. ARACBILGILERIAL prosedürüne ekliyorum. Şu şekilde
    SELECT IDENT_CURRENT('Musteri')

    Cannot insert the value NULL into column 'Musteri_id', table 'RentaCar.dbo.AracKiralama'; column does not allow nulls. INSERT fails.
    The statement has been terminated.

    Hatası veriyor.

    SELECT IDENT_CURRENT('Musteri') değerini döndürüyor ama Musteri_id kısmına insert etmiyor.
  • numeric(38,0) donus degeri budur o yuzden olabilir.Uygun donusumle yapabilirsin.Ayrıca tek proc kullan gerek yok iki taneye (iki insert tabiki yaparsın aynı proc icinde) triggersız dene yine.



    < Bu mesaj bu kişi tarafından değiştirildi fsh77 -- 30 Aralık 2013; 17:01:40 >
  • Yapay Zeka’dan İlgili Konular
    Xbox Hakkında Soru
    11 yıl önce açıldı
    Lost hakkında bir soru ...
    17 yıl önce açıldı
    Daha Fazla Göster
  • quote:

    Orijinalden alıntı: fsh77

    numeric(38,0) donus degeri budur o yuzden olabilir.Uygun donusumle yapabilirsin.Ayrıca tek proc kullan gerek yok iki taneye (iki insert tabiki yaparsın aynı proc icinde) triggersız dene yine.

    Şu şekil çözdüm. Teşekkür ederim yardımlarınız için. scope_identy kullanımını anlamış oldum.
    CREATE PROCEDURE [dbo].[KIRALAMABILGILERIAL] 
    @Musteri_isim varchar(50) ,
    @Musteri_tel nchar(10) ,
    @Musteri_email varchar(50) ,
    @Musteri_ehliyet_id int ,
    @Musteri_adres varchar(500) ,
    @Musteri_soyisim varchar(100),
    @Arac_id int,
    @Baslangic_tarihi date ,
    @Bitis_tarihi date
    AS BEGIN
    DECLARE @ID int
    INSERT INTO Musteri(Musteri_isim, Musteri_tel, Musteri_email, Musteri_ehliyet_id, Musteri_adres, Musteri_soyisim) VALUES(@Musteri_isim, @Musteri_tel, @Musteri_email, @Musteri_ehliyet_id, @Musteri_adres, @Musteri_soyisim)
    SELECT @ID = SCOPE_IDENTITY()

    INSERT INTO AracKiralama (Arac_id, Baslangic_tarihi, Bitis_tarihi, Musteri_id) VALUES(@Arac_id,@Baslangic_tarihi, @Bitis_tarihi, @ID)
    END



    < Bu mesaj bu kişi tarafından değiştirildi cllyldrm -- 30 Aralık 2013; 17:59:05 >




  • quote:

    Orijinalden alıntı: fsh77

    IDENT_CURRENT is not limited by scope and session; it is limited to a specified table.

    http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

    Bir bakayım.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.