Tigere AFTER komutu ekleyemiyorum hata veriyor

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Tigere AFTER komutu ekleyemiyorum hata veriyor

Mesaj gönderen softdestek »

VERİTABANI:MS SQL 2014
Micosoft sitesine baktığımda aşağıdaki linkten
https://msdn.microsoft.com/en-us/library/ms189799.aspx

After komutu var fakat ben bir türlü after komutu ekleyemiyorum

Kod: Tümünü seç

-- SQL Server Syntax 
Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)

CREATE TRIGGER [ schema_name . ]trigger_name 
ON { table | view } 
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF } 
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } 
[ WITH APPEND ]
[ NOT FOR REPLICATION ] 
AS { sql_statement  [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }

<dml_trigger_option> ::=
    [ ENCRYPTION ]
    [ EXECUTE AS Clause ]

<method_specifier> ::= 
    assembly_name.class_name.method_name
En basit bir trigerde bu komut eklenmiyor..
Örnek bir triger :

Kod: Tümünü seç

USE [BORSA]
GO
/****** Object:  Trigger [MUHASEBE].[Trg_FISDETAY_I_UPDATE]    Script Date: 05.07.2015 13:06:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER trigger [MUHASEBE].[Trg_FISDETAY_I_UPDATE] 
 ON [MUHASEBE].[FISDETAY] 
 for  UPDATE
 as  
 begin
   DECLARE @SAYI INT
 SET   @SAYI=(SELECT SIRANO FROM UPDATED)
 END
yukardaki kodda ön UPDATE veya INSERT Komutlarının önünen AFTER kelimesini ekleyemiyorum.
Yapmak istediğim şey;
for AFTER UPDATE
as
begin


VEYA
for AFTER INSERT
as
begin

yazmak istiyorum...
Şu anda yazamıyorum yazmaya çalıştığımda aşağıdaki hatayı alıyorum.

Msg 1084, Level 15, State 1, Procedure Trg_FISDETAY_I_UPDATE, Line 11
'after' geçersiz bir olay türüdür.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Tigere AFTER komutu ekleyemiyorum hata veriyor

Mesaj gönderen mkysoft »

CREATE yerine ALTER komutunu denemiş olabilir misiniz? Paylaştığınız kodda ALTER komutu var, ALTER mecvut olan bir nesneyi değiştirmeye yarar.
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: Tigere AFTER komutu ekleyemiyorum hata veriyor

Mesaj gönderen softdestek »

Create veya alter ile de denesem hep aynı hatayı veriyor.Ben daha önceden firebird kullanıyordum. Orda triger yazarken after ,before olayları vardı..Aynısı sanırım ms sql de yok galiba...
before karşılık gelen olay ms sql de instead of
aftere karşılık gelen olay ise (select * from inserted) durumundan elde ettiğimiz değerler.

msa sql update olayında eski table satırını komple siliyor sonra yeni değerleri yeni bir satır olarak tabloya işliyor.

(select * from deleted) update öncesi değerleri böyle buluyoruz..
(select * from inserted) update sonrası yeni değerleri böyle buluyoruz..Sanırım bu iki yöntemle önceki ve sonraki değerleri bulduğumuz için galiba after before olayı ms sql de yok..
Fakat ilgimi çeken kısım örnek yazılımda mevcut..
Henüz çözemedim kısacası



create trigger [MUHASEBE].[Trg_FISDETAY_I_UPDATE]
ON [MUHASEBE].[FISDETAY]
for update
as
begin
DECLARE @SAYI INT
END
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Tigere AFTER komutu ekleyemiyorum hata veriyor

Mesaj gönderen mkysoft »

sorguda schema (dbo) yok, ondan olabilir mi? DB ile tablo ismi arasına şema adı gelmeli.
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: Tigere AFTER komutu ekleyemiyorum hata veriyor

Mesaj gönderen softdestek »

Şema adı muhasebe ben her program için ayrı bir şema kullanıyorum.Aynı isimle olan tablolarda karışma olmasın diye...
Fakat ben dbo şeması içinde aynı şeyi yaptım yine hata mesajı verdi..
Sanırım bu after komutu iptal olmuş galiba veya bir yerde bir ayar yapmak gerekiyor ya da...

1-YÖNTEM

Kod: Tümünü seç

USE BORSA
GO

create trigger [MUHASEBE].[Trg_FISDETAY_INSERT_UPDATE] 
ON [MUHASEBE].[FISDETAY] 
for  AFTER INSERT
as 
begin
DECLARE @SAYI INT
END
2-YÖNTEM

Kod: Tümünü seç

USE BORSA
GO

create trigger [dbo].[Trg_FISDETAY_INSERT_UPDATE] 
ON [dbo].[FISDETAY] 
for  AFTER INSERT
as 
begin
DECLARE @SAYI INT
END
Cevapla