Trigger da sorunum var

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
mcetin_58
Üye
Mesajlar: 22
Kayıt: 22 Oca 2004 10:14

Trigger da sorunum var

Mesaj gönderen mcetin_58 »

Trigger hakkın da yardım istedim çok güzel açıkladınız..Ben SQL Server da
aynı şekilde kodları yazıyorum hata veriyor..mesela
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'urunler' AND type = 'TR')
DROP TRIGGER reminder
GO
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE
AS RAISERROR (50009, 16, 10)
GO
bu örneği koduma göre değiştiriyorum hataveriyor.
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'reminder' AND type = 'TR')
DROP TRIGGER reminder
GO
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE, DELETE
AS
EXEC master..xp_sendmail 'MaryM',
'Don''t forget to print a report for the distributors.'
GO
bunda da değişiklikler yapıyorum aybı şekilde bir tane çalışır örnek verirseniz ve de hatamı söylerseniz çok sevinirim.Mesajlarınızı bekliyorum...
aser
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

sanirim burada artik SQL server'a ozel bir takim komutlar devreye girdi. yani beni asti. Hic SQL server kullanmadim....
Eger
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'urunler' AND type = 'TR')
DROP TRIGGER reminder
GO
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE
AS RAISERROR (50009, 16, 10)
GO
bu kod calisiyor ise digerindeki farkliliklara bakmak lazim... ilave bir DELETE var....
sanirim bir stored proce3dure cagiriliyor ama SP un adi master..xp_sendmail seklinde midir? ayrica SP cagirma yonteminin SQL server icin bu sekilde oldugundan emin olun.

Bir de
'Don''t forget to print a report for the distributors.'
icindeki yan yana iki tirnak da sorun yapabilir. String icine tırnak yazmanin mutlaka bir yontemi vardir ama simdilik do not diyerek bir deneyebilirsiniz...

Tabi bir de hatayi verdigi satir da onemli neresi icin hata veriyor?
mcetin_58
Üye
Mesajlar: 22
Kayıt: 22 Oca 2004 10:14

titles de veriyor

Mesaj gönderen mcetin_58 »

şimdi ben bunu çalıştıramıyrum onun için ken di örneklerim de çalışmıyor,
invaled object name 'titles' diye hata veriyor siliyorum yine veriyor...
ON titles Satırı
aser
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Yapmak istediğin hangi tablonda nedir tam olarak? SQL cümlesini gönderir misin?
mcetin_58
Üye
Mesajlar: 22
Kayıt: 22 Oca 2004 10:14

sorun yukarıdaki kod

Mesaj gönderen mcetin_58 »

Bu kodu help den aldım buna benzer kodları trigger olarak çalıştırmaya çalışıyorum fakat bir türlü çalışmıyor.trigger la ilgili örnek veya yardımınız varsa yardım cı olursanız çok sevinirim...
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 ]
}
}
aser
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

İki tane tablo var SICIL ve SICILEK ikisinde de ortak olarak ISYERI ve SICILNO diye iki alan var. SICIL tablosunda bu iki alana göre silme yapıldığında (bunlar primary key) SICILEK de de aynı ISYERI ve SICILNO kaydını bulup siliyor. @ISYERI ve @SICILNO değişken, silinen tablodan aldığı ISYERI ve SICILNO değerleri bu değişkenlere atanıp silinecek tabloadan (yani SICILEK) silme işlemi gerçekleştiriliyor.

Umarım işine yarar.

Kolay gelsin.

Kod: Tümünü seç

CREATE     TRIGGER DELETE_SICIL ON dbo.SICIL FOR DELETE AS
BEGIN
  DECLARE @ISYERI VARCHAR(8)
  DECLARE @SICILNO VARCHAR(15)
  DECLARE SILINENLER CURSOR FOR SELECT ISYERI,SICILNO FROM DELETED
  OPEN SILINENLER
  FETCH NEXT FROM SILINENLER INTO  @ISYERI, @SICILNO
  WHILE @@FETCH_STATUS <> -1
  BEGIN
    DELETE FROM SICILEK WHERE ISYERI=@ISYERI AND SICILNO=@SICILNO
    FETCH NEXT FROM SILINENLER INTO  @ISYERI, @SICILNO
  END
  CLOSE SILINENLER
  DEALLOCATE SILINENLER
END
Kullanıcı avatarı
Yusuf AYDIN
Üye
Mesajlar: 69
Kayıt: 02 Oca 2004 05:45
Konum: Antalya

Mesaj gönderen Yusuf AYDIN »

QSL server da benimde çok fazla deneyimim yok ama
mçetin_58 in gönderdiği triger create işleminde
FOR INSERT, UPDATE, DELETE


Ama daha sonra gönderdiği Help rutininde ise
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }

Yani Delete işlemini içermiyor. Ben öyle algılıyorda olabilirim.

Ayrıca bir trigerın nasıl Delete tetiklemesi olmaz. buda ap ayrı birsoru veya sorun.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

SQL Server'ın helpinden:

{ [DELETE] [,] [INSERT] [,] [UPDATE] }

Are keywords that specify which data modification statements, when attempted against this table or view, activate the trigger. At least one option must be specified. Any combination of these in any order is allowed in the trigger definition. If more than one option is specified, separate the options with commas.

For INSTEAD OF triggers, the DELETE option is not allowed on tables that have a referential relationship specifying a cascade action ON DELETE. Similarly, the UPDATE option is not allowed on tables that have a referential relationship specifying a cascade action ON UPDATE.

Ayrıca gönderdiğim örnek DELETE için, ve ben bunu SQL Serverda hazırladım test ettim ve gönderdim. Yani trigger da delete de kullanılabiliyor. :wink:
Cevapla