Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Öne çıkan mesajlar

Mesaj tarihi:
Merhabalar
SQL de triggerları anlamaya çalışıyorum, diyelim şöyle bir tek databaseimiz var:

User(id int, ad varchar(30), soyad varchar(30) )

Öyle bir trigger yazmak istiyorumki, bir user Insert edilirken soyad boş bırakılırsa (yani null), soyadı yerine otomatik 'Kamil' eklensin.

Bunu nasıl başarabilirim?
Teşekkürler :)
Mesaj tarihi:
Sql programlamadan daha çok herhalde .net'te halledebilirsin gibi geliyor.Yani kullanıcı Windowns App'ta boş bırakırsa oraya otomatik bunu ekle denilebilir.Ama sql'de böyle birşey varmı tam bende hatırlamıyorum..
Mesaj tarihi:
Yok direk sql triggerla ilgili orasından eminim :) Acaba böyle birşey olabilir mi ?

create trigger soyad_check
before insert on User
for each row
when (old.query_sql is null)
begin
insert into User (id, ad , soyad)
values
(:old.id, :old.ad, 'Kamil');
end;
Mesaj tarihi:
Odinn said:
Yok direk sql triggerla ilgili orasından eminim :) Acaba böyle birşey olabilir mi ?

create trigger soyad_check
before insert on User
for each row
when (old.query_sql is null)
begin
insert into User (id, ad , soyad)
values
(:old.id, :old.ad, 'Kamil');
end;


bende benzer bişey yapmaya çalıştım ama benim yaptığımda nereyi boş bırakırsan bırak kamil yazıcaktıki seninkini gördüm. benim yapmaya çalıştığım after insert ileydi gerçi.


ama .netle cidden daha rahat olur
Mesaj tarihi:
mssql kac kullaniyorsun bilmiyorum. ben en son triggerimi 5 sene once yazdigim icin (o kadar oldu mu yahu?) uyum sorunu olabilir, genel olarak aklimda kaldigi kadariyla yazayim


CREATE TRIGGER soyad_check ON User FOR INSERT
AS

DECLARE @soyad VARCHAR(100)
DECLARE @id INT -- yanlis olabilir int
SELECT @soyad = (SELECT soyad FROM Inserted)

IF(@ soyad = "")
BEGIN
UPDATE User SET soyad="Kamil" WHERE id=@id -- keske limit olsa mssql'de de..
END



boyle birsey olmasi lazim.. sallamasyon varsa kusura bakma
Mesaj tarihi:
Odinn said:
Yok direk sql triggerla ilgili orasından eminim :) Acaba böyle birşey olabilir mi ?

create trigger soyad_check
before insert on User
for each row
when (old.query_sql is null)
begin
insert into User (id, ad , soyad)
values
(:old.id, :old.ad, 'Kamil');
end;


bu arada, bu syntax dogru mu bilemiyorum ama, dogruysa bile duble kayit yapabilitesi nedeniyle before inster yapiyorsan bir sekilde kaydi durdurman lazim. nasil yapiliyordu hatirlamiyorum ama yapiliyordu =) rollback mollback bile vardi
Mesaj tarihi:
eskisini bilmiyorum da mssql 2005 de triggerlar per row değil per query. trigger ın içi;


Update insan set soyadi='Kamil' where insan.id in (select id from inserted where soyadi is null);


gibi bişi olması lazım
Mesaj tarihi:
Tabloyu tanımlarken her sütun için default değer verebiliyorsun. Bir satır eklerken o sütun boş bırakılırsa default değeri alıyor böylece. Şöyle bir şeydi sanırım:

CREATE TABLE user
(
...
soyad VARCHAR(30) DEFAULT 'Kamil'
);

SQL standardınının içinde midir yoksa sadece bazı SQL sunucuları mı destekliyor hatırlamıyorum. Trigger için alıştırma olsun diye sormuşsan ayrı tabi. :)
Mesaj tarihi:
Mirage said:
Tabloyu tanımlarken her sütun için default değer verebiliyorsun. Bir satır eklerken o sütun boş bırakılırsa default değeri alıyor böylece. Şöyle bir şeydi sanırım:

CREATE TABLE user
(
...
soyad VARCHAR(30) DEFAULT 'Kamil'
);

SQL standardınının içinde midir yoksa sadece bazı SQL sunucuları mı destekliyor hatırlamıyorum. Trigger için alıştırma olsun diye sormuşsan ayrı tabi. :)


evet böyle en mantıklısı triggerla kasmaya gerek yok.
Mesaj tarihi:
aslinda triggerla kasmaya bazi ozel durumlarda gerek var. misal girilen veri null string de olabilircekse, default deger atanmayacagindan trigger kullanisli olacaktir.

yani default degerler kullanilmali, fakat trigger ile ikinci bir onlem dusunulmesinde sakinca yok. ki triggerlar candir, canandir, kullanmak lazim.
Mesaj tarihi:
tabiki her duruma göre çözümler farklı olacaktır.
Mesaj tarihi:
ödevde triggerla zorunluydu ondan illa trigger dedimdi :D Neyse yukarda yazdığım dooruymuş sağolun tavsiyeler için.
×
×
  • Yeni Oluştur...