[SQL] Wyzwalacze nie działają


(Marcin Obala) #1

Witam

mam problem z wyzwalaczami. Nie chcą po prostu działać, albo ja nie wiem jak je deklarować. Próbuje tak

CREATE TRIGGER ImieNazwisko

AFTER INSERT OF imie ON Student


BEGIN 

	SELECT 'TRIGGER dziala !';

END

I nico, podkreśla większość kodu. Co jest nie tak? Dodatkowo jak wejdę ręcznie w wyzwalacze i dam nowy wyzwalacz, dostanę kod, przerobię go

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:		

-- Create date: 

-- Description:	

-- =============================================

CREATE TRIGGER dbo.test

   ON dbo.Student

   AFTER INSERT,DELETE,UPDATE

AS 

BEGIN

	-- SET NOCOUNT ON added to prevent extra result sets from

	-- interfering with SELECT statements.

	SET NOCOUNT ON;


    -- Insert statements for trigger here


END

GO

Jest ok. Tworzę nowy zapytanie, sklejam dokładnie ten sam kod i mi podkreśla linijkę

ON dbo.Student

Wie ktoś o co chodzi? To wygląda tak jakby nie wiedział gdzie umieścić wyzwalacz a ręcznie wybrany z drzewka wie gdzie umieścić.


(Tomek Matz) #2

TRIGGER

Kod tego drugiego wyzwalacza wydaje się być poprawny. Jeśli tak jest, to po naciśnięciu przycisku Execute pojawi się informacja "Command(s) completed successfully.", a jeśli tak nie jest, to powinny pojawić się jakieś komunikaty błędów.


(Marcin Obala) #3

Chodzi o to że pojawia się komunikat że jest ok ale jeśli wejdę w bazę->Tables->dbo.Tabela->Triggers-> prawoklik i New Trigger -> dostaję wzorzec -> wklejam swój kod ten drugi wyżej. Jest ok. Biorę New Query -> wklejam ten kod -> mam komunikat

Msg 8197, Level 16, State 4, Procedure test, Line 6

The object 'dbo.Student' does not exist or is invalid for this operation.

(Tomek Matz) #4

Ale wklejasz w okienko New Query kod łącznie z klauzulą

USE []

GO

?


(Marcin Obala) #5

Robiłem tak ale z tym kodem 1 a jest on niepoprawny więc nic dziwnego że nie działało, a wklejając ten drugi już o tym zapomniałem -.- Głupi błąd. Teraz działa


(Tomek Matz) #6

Niekoniecznie głupi, bo nie zawsze jest to potrzebne. Jeśli wybierzesz -> ppm -> New Query i wstawisz kod tworzący wyzwalacz, ale już bez Use, to wówczas zadziała. Reasumując trzeba patrzeć dla jakiej bazy danych zostało utworzone okienko New Query (jak się najedzie na nazwę zakładki to widać to wyraźnie).


(somekind) #7

Na moje oko, to się w ogóle składni nie trzyma. Raczej tak:

CREATE TRIGGER ImieNazwisko -- najpierw piszemy, CO chcemy zrobić

ON Student -- potem, GDZIE to ma być

AFTER INSERT -- i KIEDY działać

AS -- jako

BEGIN 

	SELECT 'TRIGGER dziala !';

END

(Marcin Obala) #8

To że jest w cały świat to już wiem :wink: ale to była kolejna z prób, o dziwo pierwsza wersja była prawidłowa tylko że nie było use database;. Use database dodałem później ale już do którejś wersji skryptu który był zły więc nadal nie działało. Teraz wszystko działa i robi to co chciałem :wink: Przetwarza wprowadzone imiona i nazwiska do formatu Imię Nazwisko, bez żadnych pOkEmOnIaStYcH zapisów.