trigger

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

max
Posty: 167
Rejestracja: 23 cze 2010, 12:17
Rola: Administrator CDN XL

trigger

Post autor: max »

Witam, pytanie pewnie banalne ale proszę o wyrozumiałość :)
próbuje stworzyć prostego triggera który by sprawdzał przy zakładaniu kartoteki czy pole symbol już występuje w bazie tylko cały czas otrzymuje komunikat że symbol istnieje chociaż wiem że nie. Poniżej coś co udało mi sie stworzyć:
PS. oczywiście chodzi o pole twr_katalog (w przykładzie symbol bo testowałem i tak mi sie przekopiowało)

Kod: Zaznacz cały

Create TRIGGER symbol
ON cdn.TwrKarty
FOR UPDATE
AS
SET NOCOUNT ON
IF EXISTS(
SELECT * FROM inserted i
RIGHT JOIN cdn.TwrKarty t
ON t.twr_nazwa = i.twr_nazwa
)
BEGIN
RAISERROR('Istnieje towar o takim symbolu.', 16, 1)
RETURN

END
Ostatnio zmieniony 15 gru 2011, 12:32 przez max, łącznie zmieniany 1 raz.

rafal
Posty: 48
Rejestracja: 02 paź 2009, 16:31
Rola: Inny

Re: trigger

Post autor: rafal »

Spróbuj tak

Kod: Zaznacz cały

Create TRIGGER symbol
ON cdn.TwrKarty
FOR UPDATE
AS
SET NOCOUNT ON
IF EXISTS(
SELECT * FROM inserted i
RIGHT JOIN cdn.TwrKarty t
ON t.twr_nazwa = i.twr_nazwa
where i.twr_gidnumer!=t.twr_gidnumer
)
BEGIN
RAISERROR('Istnieje towar o takim symbolu.', 16, 1)
RETURN

END

max
Posty: 167
Rejestracja: 23 cze 2010, 12:17
Rola: Administrator CDN XL

Re: trigger

Post autor: max »

Wielkie dzięki :) znowu się czegoś więcej nauczyłem. masz piwko ;)

a mam jeszcze pytanie odnośnie poniższego triggerka: blokuje on dostęp do CDN dwóch operatorów z jednego komputera. Trigger działa tylko wywala błedy (ale nie otworzy modułu) czy tak może być czy raczej to jest szkodliwe dla bazy?

Kod: Zaznacz cały

TRIGGER sesja
ON cdn.sesje
FOR insert
AS
SET NOCOUNT ON
IF EXISTS(SELECT 
        * 
    FROM inserted i
  JOIN cdn.Sesje t
ON  i.ses_sesjaID!=t.ses_sesjaID
  where t.SES_Aktywna = (
  SELECT 
        [SES_Komputer]  
  FROM [CDNXL_szkolenie].[CDN].[Sesje]
  where SES_Aktywna = 0 
  group by SES_Aktywna,
        [SES_Komputer]
    HAVING count(ses_komputer) = 2)
)
BEGIN
RAISERROR('aktywna sesja.', 16, 1)
RETURN

END    

elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: trigger

Post autor: elmiq »

Po pierwsze sprawdź co się stanie jak dostaniesz błąd - w sensie czy XL ustawi nowo tworzoną sesję na zakończoną, na aktywną, czy na przerwaną. Po drugie sam trigger jest błędny (int = varchar ? )
Mateusz Świerkosz

http://elmiq.blogspot.com/

ODPOWIEDZ