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?
Cevapla
#2
(05-06-2017, Saat: 14:28)AkMegaSoft Adlı Kullanıcıdan Alıntı: 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?

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
Cevapla
#4
(05-06-2017, Saat: 15:58)AkMegaSoft Adlı Kullanıcıdan Alıntı: 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

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ı: 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.

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ı: Neden 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.
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ı: 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)

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?
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.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Birden fazla Trigger anemos 3 1.101 09-03-2023, Saat: 00:10
Son Yorum: anemos
  iki farklı tabloyu birleştirme noname101 2 788 05-01-2023, Saat: 14:14
Son Yorum: noname101
  SQL Trigger Kaydı OZCANK 10 3.318 16-03-2022, Saat: 11:26
Son Yorum: OZCANK
  Trigger ile İlgili Kaydın ID Numarası Halil Han BADEM 4 3.310 15-09-2020, Saat: 09:14
Son Yorum: DelphiCan
  String tarih ve saat alanını birleştirme kullanma cinarbil 9 10.150 22-08-2019, Saat: 00:25
Son Yorum: serdar



Konuyu Okuyanlar: 1 Ziyaretçi