Strona 1 z 1

trigger

: 15 gru 2011, 11:58
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

Re: trigger

: 15 gru 2011, 12:18
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

Re: trigger

: 15 gru 2011, 12:41
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    

Re: trigger

: 16 gru 2011, 10:38
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 ? )