Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Trigger ile iki alanı birleştirme
#1
Merhaba arkadaşlar,
Veri tabanımda PERSONEL tablosu üzerinde, VarChar tipinde AD, SOYAD ve AD_SOYAD alanlarım var.
Tabloya kayıt eklendiğinde veya güncellendiğinde, AD ve SOYAD alanlarını birleştirerek AD_SOYAD alanına yazdırmak istiyorum. 
Daha önce FireBird veri tabanımda benzer bir yapıyı aşağıdaki gibi kullanıyordum. 
CREATE TRIGGER TR_PERSONEL_ADSOYAD FOR PERSONEL
ACTIVE BEFORE 
 INSERT OR 
 UPDATE
POSITION 1
AS
BEGIN
   new.AD_SOYAD =new.ADI||' '||new.SOYADI;
END^

MS-SQL Server için nasıl yapabilirim?
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#2
(05-06-2017, Saat: 14:28)AkMegaSoft Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba arkadaşlar,
Veri tabanımda PERSONEL tablosu üzerinde, VarChar tipinde AD, SOYAD ve AD_SOYAD alanlarım var.
Tabloya kayıt eklendiğinde veya güncellendiğinde, AD ve SOYAD alanlarını birleştirerek AD_SOYAD alanına yazdırmak istiyorum. 
Daha önce FireBird veri tabanımda benzer bir yapıyı aşağıdaki gibi kullanıyordum. 
CREATE TRIGGER TR_PERSONEL_ADSOYAD FOR PERSONEL
ACTIVE BEFORE 
 INSERT OR 
 UPDATE
POSITION 1
AS
BEGIN
   new.AD_SOYAD =new.ADI||' '||new.SOYADI;
END^

MS-SQL Server için nasıl yapabilirim?

Denemedim ama insert için şunu kullanabilirsiniz.

CREATE TRIGGER TR_PERSONEL_ADSOYAD on  PERSONEL FOR INSERT
AS
DECLARE @ADSOYAD VARCHAR(50)
DECLARE @ID INT
SELECT @ID=ID ,@ADSOYAD=AD+' '+SOYAD FROM INSERTED

UPDATE PERSONEL SET ADSOYAD=@ADSOYAD WHERE ID=@ID
Cevapla
#3
Yardımınız için teşekkür ederim.
SQL kodlarınızı aşağıdaki gibi düzenleyince hem Insert hem de Update işleminde AD_SOYAD alanı güncelleniyor.
CREATE TRIGGER dbo.TR_PERSONEL_ADSOYAD ON dbo.PERSONEL
WITH EXECUTE AS CALLER
FOR INSERT, UPDATE
AS
BEGIN
 DECLARE @ADSOYAD VARCHAR(50)
 DECLARE @ID INT
 SELECT @ID=ID ,@ADSOYAD=AD+' '+SOYAD FROM INSERTED
 UPDATE PERSONEL SET AD_SOYAD=@ADSOYAD WHERE ID=@ID
END
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#4
(05-06-2017, Saat: 15:58)AkMegaSoft Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlYardımınız için teşekkür ederim.
SQL kodlarınızı aşağıdaki gibi düzenleyince hem Insert hem de Update işleminde AD_SOYAD alanı güncelleniyor.
CREATE TRIGGER dbo.TR_PERSONEL_ADSOYAD ON dbo.PERSONEL
WITH EXECUTE AS CALLER
FOR INSERT, UPDATE
AS
BEGIN
 DECLARE @ADSOYAD VARCHAR(50)
 DECLARE @ID INT
 SELECT @ID=ID ,@ADSOYAD=AD+' '+SOYAD FROM INSERTED
 UPDATE PERSONEL SET AD_SOYAD=@ADSOYAD WHERE ID=@ID
END

Merhaba, size Instead of triggerlarını önerebilirim. Eğer database'in, "Recursive Triggers" seçeneği Enabled durumda ise sorun yaşayabilirsiniz ;-)

Instead of trigger'ları işlem(insert,update ya da delete) gerçekleşmeden önce tetiklenirler ve işlemin gerçeklenmesini sizin inisiyatifinize bırakırlar.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#5
Neden computed kullanmıyorsun?
AD_SOYAD COMPUTED BY (ADI || ' ' || SOYADI)
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...





Cevapla
#6
(08-06-2017, Saat: 12:54)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba, size Instead of triggerlarını önerebilirim. Eğer database'in, "Recursive Triggers" seçeneği Enabled durumda ise sorun yaşayabilirsiniz ;-)

Instead of trigger'ları işlem(insert,update ya da delete) gerçekleşmeden önce tetiklenirler ve işlemin gerçeklenmesini sizin inisiyatifinize bırakırlar.

Bilgi için teşekkür ederim. Bu konu hakkında fazla bilgim yok. Araştırıp öğrenirim. 

(08-06-2017, Saat: 15:24)QuAdR Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlNeden computed kullanmıyorsun?
AD_SOYAD COMPUTED BY (ADI || ' ' || SOYADI)

hassur'un veriği kodlarla hallettim. 
Sizin bahsettiğiniz kodu MS-SQL Server da, trigger in kod bölümüne mi yazmak gerekiyor.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#7
Sql server da computed belirtmenize gerek yok direk olarak field create eder gibi yazacaksınız
Örnek:
ALTER TABLE personel
ADD AD_SOYAD as (ADI || ' ' || SOYADI)
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...





Cevapla
#8
(08-06-2017, Saat: 15:42)QuAdR Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSql server da computed belirtmenize gerek yok direk olarak  field create eder gibi yazacaksınız
Örnek:
ALTER TABLE personel
ADD AD_SOYAD as  (ADI || ' ' || SOYADI)

Hocam bu bahsetmiş olduğunuz yöntemde, AD veya SOYAD alanı güncellendeğinde de AD_SOYAD field içeriği güncelleniyor mu? Yani adı Ahmet'ti Mehmet oldu. AD_SOYAD alanında bu değer doğrudan değişecek mi?
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#9
Tabiki kullanım amacı budur zaten.
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...





Cevapla
#10
Teşekkür ederim hocam.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Trigger a paramatre gönderme Bay_Y 8 151 23-05-2018, Saat: 18:19
Son Yorum: vkamadan



Konuyu Okuyanlar: 1 Ziyaretçi