MSSQL de trigger larda değer atama
MSSQL de trigger larda değer atama
Herkese Merhaba
MSSQL de BEFORE INSERT ,BEFORE UPDATE de o tablo kolonlarına bilgi atamak istiyorum.
1- MSSQL de BEFORE ?
2- trigger içinde değer atamayı bulamadım (SET falan işe yaramadı)
3- Recordu Interbase de new ile alıyorduk MSSQL deki karşılıkları nedir
(new.CREATEDATE gibi)
kod :
CREATE TRIGGER BEFINSCARI ON CARI FOR INSERT AS
BEGIN
CREATEDATE=CURRENT_TIMESTAMP;
END
MSSQL de BEFORE INSERT ,BEFORE UPDATE de o tablo kolonlarına bilgi atamak istiyorum.
1- MSSQL de BEFORE ?
2- trigger içinde değer atamayı bulamadım (SET falan işe yaramadı)
3- Recordu Interbase de new ile alıyorduk MSSQL deki karşılıkları nedir
(new.CREATEDATE gibi)
kod :
CREATE TRIGGER BEFINSCARI ON CARI FOR INSERT AS
BEGIN
CREATEDATE=CURRENT_TIMESTAMP;
END
Selamlar,
T-SQL Reference'den alıntı
yani,
şeklinde Create ederseniz. Trigger'ınız tableda Insert işlemi gerçekleştikten, Tüm Referantial Integryty check edildikten Tüm Constraintler Kontrol edildikten sonra ve Hata almaz ise Tetiklenir.
diye create ederseniz ki Default böyledir. O zaman tam Insert anında Trigger Tetiklenir ve işleminiz araya girer.
Bu arada DELETED ve INSERTED diye reserved Word'ler vardır ve
derseniz (ancak Trigger DELETE için yazılmış olmalıdır) o anda silinmekte olan kayıtları görebilirsiniz.
derseniz o anda Update olan ve/veya Insert olan kayıtları görebilirsiniz.
Bu arada MS-SQL'de SP veya Triggerda kullanılan (tanımlanmış) değişkenler @ işareti ile başlamak zorundadır.
Gelelim sizin örneğinize,
şeklinde yapmalısınız. Ancak dikkat edilmesi gereken şey, yukarıda verdiğim Trigger örneği Singleton diye bahsedilen Tekli kayıt methodu ile çalışır. Eğer siz Multiple-rows şeklinde çalışacaksanız biraz değiştirmek gerekiyor.
Kolay Gelsin.
T-SQL Reference'den alıntı
MS-SQL Server'da, bildiğim kadarı ve okuduğum kadarı ile BEFORE INSERT olayı yok (Aslında TRIGGER ya o anda çalışmakta yada AFTER olarak çalışmakta)Syntax
CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
} ]
sql_statement [ ...n ]
}
}
yani,
Kod: Tümünü seç
CREATE TRIGGER MY_TRIGGER ON MY_TABLE FOR AFTER INSERT
Kod: Tümünü seç
CREATE TRIGGER MY_TRIGGER ON MY_TABLE FOR INSERT
Bu arada DELETED ve INSERTED diye reserved Word'ler vardır ve
Kod: Tümünü seç
SELECT * FROM DELETED
Kod: Tümünü seç
SELECT * FROM INSERTED
Bu arada MS-SQL'de SP veya Triggerda kullanılan (tanımlanmış) değişkenler @ işareti ile başlamak zorundadır.
Gelelim sizin örneğinize,
Kod: Tümünü seç
CREATE TRIGGER BEFINSCARI ON CARI FOR INSERT AS
BEGIN
UPDATE CARI SET CREATEDATE = GETDATE() WHERE CARI_HAREKET_ID = (SELECT CARI_HAREKET_ID FROM INSERTED)
END
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kuri_TLJ baya güzel açıklamış, çalışan bir örnek şu linke göndermiştim MS SQL Server için:
viewtopic.php?t=644
viewtopic.php?t=644
Hehehehehe,
6.5, 7.0 ve 2000'de az güreş tutmadık biz bu MS-SQL Server'la
Kaç defa elimizde kaldı ızavallım. Ama sağolsun TAŞ gibi Query yazar duruma geldik sayesinde
Patlamayacak en sağlam Query'ler MS-SQL Server'da yazılıyor Her şeyi basit basit adım adım yapmanız lazım, biraz karmaşaya girdiniz mi saçmalamaya başlıyor ehi ehi ehiii...
Kolay Gelsin
6.5, 7.0 ve 2000'de az güreş tutmadık biz bu MS-SQL Server'la
Kaç defa elimizde kaldı ızavallım. Ama sağolsun TAŞ gibi Query yazar duruma geldik sayesinde
Patlamayacak en sağlam Query'ler MS-SQL Server'da yazılıyor Her şeyi basit basit adım adım yapmanız lazım, biraz karmaşaya girdiniz mi saçmalamaya başlıyor ehi ehi ehiii...
Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Sayın Kuri_TLJ
Update triggerında gelen kayıdın bilgisini nasıl değiştiriyoruz ?
Update komutunu kullanamıyorum kullandığında hata veriyor ?
Ornek ;
CREATE TRIGGER UPDCARI ON CARI FOR UPDATE AS
BEGIN
.............
UPDATE CARI SET UPDATEDATE = GETDATE()
WHERE CARI_HAREKET_ID = (SELECT CARI_HAREKET_ID FROM INSERTED)
END
Update triggerında gelen kayıdın bilgisini nasıl değiştiriyoruz ?
Update komutunu kullanamıyorum kullandığında hata veriyor ?
Ornek ;
CREATE TRIGGER UPDCARI ON CARI FOR UPDATE AS
BEGIN
.............
UPDATE CARI SET UPDATEDATE = GETDATE()
WHERE CARI_HAREKET_ID = (SELECT CARI_HAREKET_ID FROM INSERTED)
END
Selamlar,
Dikkatinizi bir noktaya çekmek istiyorum. Önceki cevapta bir uyarı yapmıştım,
Eğer 1 kayıt için yaptığınız işlem oluyor, tablonun tamamnını yapmaya kalktığınızda olmuyorsa bu dediğim sebeptendir.
Eğer bu dediklerimiz değil ise geriye dönen hatayı olduğu gibi bize yazın bir göz atalım.
Kolay Gelsin.
Dikkatinizi bir noktaya çekmek istiyorum. Önceki cevapta bir uyarı yapmıştım,
Muhtemelen siz de oraya takılıyor olabilirsiniz. SQL Query Analyzer'da ilgili tabloda sadece bir Satır'ı UPDATE eden bir UPDATE cümleciği yazıp çalıştırın, sonra Tablodaki bütün kayıtlar için aynı UPDATE cümleciğini çalıştırın ve sonuçları gözlemleyin.Ancak dikkat edilmesi gereken şey, yukarıda verdiğim Trigger örneği Singleton diye bahsedilen Tekli kayıt methodu ile çalışır. Eğer siz Multiple-rows şeklinde çalışacaksanız biraz değiştirmek gerekiyor.
Eğer 1 kayıt için yaptığınız işlem oluyor, tablonun tamamnını yapmaya kalktığınızda olmuyorsa bu dediğim sebeptendir.
Eğer bu dediklerimiz değil ise geriye dönen hatayı olduğu gibi bize yazın bir göz atalım.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Sayın Kuri_TLJ
hata benim kodlarımda imiş daha açıkçası tablo üzerinde 2 işlemim var bu şekilde yapınca 2. işlemimde hata veriyordu yapmayınca hata vermiyordu .Meğerse hata 2. işlemde imiş düzelttim sorun kalmadı.
Sayenizde IBSql bilgisi ile MsSql i de hallettim
Yardımlarınız için çok teşekkür ederim.Sağolun
hata benim kodlarımda imiş daha açıkçası tablo üzerinde 2 işlemim var bu şekilde yapınca 2. işlemimde hata veriyordu yapmayınca hata vermiyordu .Meğerse hata 2. işlemde imiş düzelttim sorun kalmadı.
Sayenizde IBSql bilgisi ile MsSql i de hallettim
Yardımlarınız için çok teşekkür ederim.Sağolun
Tekrar Merhaba,
Ne demek, yardım edebildiysek ne mutlu bizlere
Kolay Gelsin.
Not : Güzel bir nickname bulmuşsunuz
Ne demek, yardım edebildiysek ne mutlu bizlere
Kolay Gelsin.
Not : Güzel bir nickname bulmuşsunuz
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/