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

sql sorusu


Odinn

Öne çıkan mesajlar

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 :)
Link to comment
Sosyal ağlarda paylaş

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;
Link to comment
Sosyal ağlarda paylaş

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
Link to comment
Sosyal ağlarda paylaş

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
Link to comment
Sosyal ağlarda paylaş

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
Link to comment
Sosyal ağlarda paylaş

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. :)
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...