Triggery

Odpowiedz Nowy wątek
2019-12-05 20:04

Rejestracja: 1 rok temu

Ostatnio: 1 tydzień temu

0

Mam do was pytanko macie może pomysł jak poprawić ten kod Triggera , aby zabraniał dodawać Państwa bo bazy danych , które zaczyna się od litery x ?

Create Trigger NieDodajePanstwa
before insert 
on Panstwa
for each row
begin
if(new.Panstwo like 'x%' or new.Panstwo like 'X%') then
SIGNAL SQLSTATE '45000'
   SET MESSAGE_TEXT = 'Nie możesz dodać Panstwa zaczynającego się od litery X';
   END IF;
   END 

Rzeźbię w tym gnoju , szukam i kurde pustka

edytowany 2x, ostatnio: Cisi204, 2019-12-05 20:22
Xavery odpada :/ - _13th_Dragon 2019-12-05 20:06
hhahahahaha rzeczywiście :):) to nie wiem nazwa np hmmmmm , panstwa - Cisi204 2019-12-05 20:08
Bardziej chodzi mi o sam mechanizm działania takiego triggera , bo to jest w sql ciekawa i przydatna rzecz - Cisi204 2019-12-05 20:09
powiedz jaki jest efekt? - _13th_Dragon 2019-12-05 20:25

Pozostało 580 znaków

2019-12-05 20:26

Rejestracja: 1 rok temu

Ostatnio: 1 tydzień temu

0

Efekt kodu powyżej

Msg 102, Level 15, State 1, Procedure NieDodajePanstwa, Line 2 [Batch Start Line 151]
Incorrect syntax near 'before'.
Msg 156, Level 15, State 1, Procedure NieDodajePanstwa, Line 6 [Batch Start Line 151]
Incorrect syntax near the keyword 'then'.

Pozostało 580 znaków

2019-12-05 20:32

Rejestracja: 1 rok temu

Ostatnio: 1 tydzień temu

0

Baza Wgląda w sposób następujący:

Tabela Panstwa
PanstwoID
NazwaPanstwa
LiczaLudnosci
Stolica
PrezydentID

TabelaPrezydent
PrezydentID
ImiePrezydenta
NazwiskoPrezydenta
SamochodID

TabelaSamochod
SamochodID
Marka
RokProdukcji
Spalania

I chciałbym miec trigger aby do tabeli Panstwa nie wprowadzac panstwa zaczynajacego sie od litrery X , nie chce tego robic Coinstrant bo nie :)

edytowany 2x, ostatnio: Cisi204, 2019-12-05 20:34
Pokaż pozostałe 3 komentarze
Obserwuje cię już od dłuższego czasu na tym forum , i wiem że ironię to ty chyba uwielbiasz :) - Cisi204 2019-12-05 20:59
Raczej sarkazm oraz czarny humor, ale nadał nie odpowiedziałeś co to za SQL, o ile podstawowe polecenia są wszędzie takie same o tyle standardowe funkcję oraz zaawansowane polecenia jak create trigger są różne. Jaki to SQL? - _13th_Dragon 2019-12-05 21:09
SQL server 2018 - Cisi204 2019-12-05 21:11
@Cisi204: nie ma wersji 2018... - Panczo 2019-12-06 07:07
Wszystko pisałem w Microsoft SQL server , typowy sql..... - Cisi204 2019-12-06 20:00

Pozostało 580 znaków

2019-12-05 21:14

Rejestracja: 1 rok temu

Ostatnio: 1 tydzień temu

0
Create Trigger NieDodajePanstwa
on Panstwo
Instead of insert
as
begin
 insert into Panstwo
 select *from Panstwo
 where exists (select 1 where NazwaPanstwa like 'x%' or NazwaPanstwa like 'X%')
end

hmm mam coś takiego , jesli nazwa panstwa zaczyna się od 1 wstawia 1 , i teraz jak to zrobic , aby blokował dodawanie wszystkich rekordow które mają z WHERE 1

Tomek ja wiem jak sie ogólnie tworzy trigger , tylko jak zapisac ten warunek aby po podaniu nazwy panstwa sprawdzał czy zaczyna się ona od litery X i jestli tak to nie dodawał jej do bazy ? - Cisi204 2019-12-05 21:31
Warunek jest ok, ten befor insert jest niezgodny z dokumentacją. - Tomek Pycia 2019-12-05 21:32

Pozostało 580 znaków

2019-12-05 21:35

Rejestracja: 1 rok temu

Ostatnio: 1 tydzień temu

0

Tak tez nie działa

Create Trigger NieDodajePanstwa
on Panstwa
for instead of insert
for each row
begin
if(new.Panstwo like 'x%' or new.Panstwo like 'X%') then
SIGNAL SQLSTATE '45000'
   SET MESSAGE_TEXT = 'Nie możesz dodać Panstwa zaczynającego się od litery X';
   END IF;
   END
i z dbo tez nie działa ? ten warunek jest zły , tylko nie mam pomysłu jak go inaczej zapisac . Jakas zmienna dekalrujaca insert ? - Cisi204 2019-12-05 21:38

Pozostało 580 znaków

2019-12-05 21:40

Rejestracja: 1 rok temu

Ostatnio: 20 minut temu

0

Koniecznie musisz mieć trigger? Jak nie to użyj CHECKa:


CREATE TABLE Panstwo (
    Panstwo varchar(200) CHECK (upper(Panstwo) not like 'X%')
);

insert into Panstwo values('albania')
insert into Panstwo values('xalbania')
edytowany 1x, ostatnio: Tomek Pycia, 2019-12-05 21:40
Wolałbym triggera :) - Cisi204 2019-12-05 21:42
Triggery to zło. Jak nie jest to projekt akademicki to wszystko będzie lepsze od triggera - Tomek Pycia 2019-12-05 21:43
to jest projekt akademicki :D - Cisi204 2019-12-05 21:44

Pozostało 580 znaków

2019-12-05 21:44

Rejestracja: 1 rok temu

Ostatnio: 1 tydzień temu

0

Napiałem triggera , ktory zlicza ilosc dodanych rekordow , ktore spełniają warunek w where :

create trigger PoprawnoscNazwyPanstwa
on Panstwo
for insert
as
if exists (select * from Panstwo where NazwaPanstwa like 'x%' or NazwaPanstwa like 'X%' )
begin
    declare @count tinyint
    set @count=(select count(*) from Panstwo where NazwaPanstwa like 'x%' or NazwaPanstwa like 'X%')
    print cast(@count as varchar(3))+'Niepoprawna nazwa Panstwa zostala dodana do bazy'
end
go
edytowany 1x, ostatnio: Cisi204, 2019-12-05 21:54
i teraz się główkuje jak go przerobic , na insert sprawdzający czy wprowadzane panstwo zaczyna sie od litery x , jesli tak to komunikat ze cie nie dodajemy i fizycznie go nie dodajemy - Cisi204 2019-12-05 21:46

Pozostało 580 znaków

2019-12-05 22:00

Rejestracja: 1 rok temu

Ostatnio: 20 minut temu

0

Create Trigger NieDodajePanstwa
on Panstwa
for insert as
begin
if EXISTS(  select 1 from  inserted where Panstwo like 'x%' or Panstwo like 'X%' )
begin
RAISERROR ('Nie możesz dodać Panstwa zaczynającego się od litery X',10,1)
        ROLLBACK TRANSACTION
END
end
Totalnie pomieszałeś MySQL z MSSALem - Tomek Pycia 2019-12-05 22:00

Pozostało 580 znaków

2019-12-05 22:02

Rejestracja: 1 rok temu

Ostatnio: 1 tydzień temu

0

create trigger NieDodajePanstwa
on Panstwo
after insert
as
begin
if( NazwaPanstwa like 'x%' or NazwaPanstwa like 'X%')
begin
print 'Nie mozesz dodac panstwa na litere x'
rollback
end
end

haha wpadliśmy na coś podobnego, tylko że moj warunek jest jaki jest xD

edytowany 1x, ostatnio: Cisi204, 2019-12-05 22:03
Powiesz mi co oznacza 10,1 w RAISERROR ? o ile 1 to zapewne indentyfikator tego czy zostalo dodane panstwo na X o tyle 10 nie wiem czym jest - Cisi204 2019-12-05 22:05

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0