Triger w mssql
natukafszy - 11-05-2007 12:33
Triger w mssql
Mam do napisania triger w mssql. Triger ten mam juz napisany w Firebirdzie i chcialbym go przeniesc do MSSQL.
natukafszy - 11-05-2007 12:33
Oto triger w firebirdzie:
CREATE TRIGGER "tabela_del" FOR 'tabela" ACTIVE BEFORE DELETE POSITION 0 AS DECLARE n INTEGER; BEGIN IF( OLD."x" IS NOT NULL AND OLD."x" != 0 ) THEN EXCEPTION "exc1";
n = NULL; SELECT MAX("Id") FROM "tabela" INTO :n; IF (OLD."Id" != n) THEN EXCEPTION "exc2"; END ^
Mam pytanie w jaki sposob zastapic bledy (EXCEPTION) z Firebirda na MySQL zeby bo spelnieniu warunkow IF( OLD."x" IS NOT NULL AND OLD."x" != 0 ) i IF (OLD."Id" != n) pole z tabeli nie zostalo usuniete a wyswietlony zostal odpowiedni blad?
Użytkownik "natukafszy" <kusiczka22@wp.pl> napisał w wiadomości news:f1s9v1$r4a$1@atlantis.news.tpi.pl... > Mam do napisania triger w mssql. Triger ten mam juz napisany w Firebirdzie > i chcialbym go przeniesc do MSSQL. > > >
Bartek Dajewski - 11-05-2007 12:33
Cześć.
Użytkownik "natukafszy" <kusiczka22@wp.pl> napisał w wiadomości news:f1sa4d$rr2$1@atlantis.news.tpi.pl... [...] > Mam pytanie w jaki sposob zastapic bledy (EXCEPTION) z Firebirda na MySQL > zeby bo spelnieniu warunkow IF( OLD."x" IS NOT NULL AND OLD."x" != 0 ) i IF > (OLD."Id" != n) pole z tabeli nie zostalo usuniete a wyswietlony zostal > odpowiedni blad?
Chodzi, jak rozumiem, o usuwanie rekordu, a nie pola. Jeśli tak, to: raiserror + rollback transaction
PS. Znajdziesz to w BOL pod hasłem "create trigger". I inne rzeczy też; naprawdę warto poczytać... -- Pozdrawiam :-) Bartek
natukafszy - 11-05-2007 12:33
Moze to ktos zakodowac tak dla przykladu dla mnie :) ?
Użytkownik "Bartek Dajewski" <bartek@UsunTo.tradiss.com.pl> napisał w wiadomości news:f1scv0$892$1@news.onet.pl... > Cześć. > > Użytkownik "natukafszy" <kusiczka22@wp.pl> napisał w wiadomości > news:f1sa4d$rr2$1@atlantis.news.tpi.pl... > [...] >> Mam pytanie w jaki sposob zastapic bledy (EXCEPTION) z Firebirda na MySQL >> zeby bo spelnieniu warunkow IF( OLD."x" IS NOT NULL AND OLD."x" != 0 ) i > IF >> (OLD."Id" != n) pole z tabeli nie zostalo usuniete a wyswietlony zostal >> odpowiedni blad? > > Chodzi, jak rozumiem, o usuwanie rekordu, a nie pola. Jeśli tak, to: > raiserror + rollback transaction > > PS. Znajdziesz to w BOL pod hasłem "create trigger". I inne rzeczy też; > naprawdę warto poczytać... > -- > Pozdrawiam :-) > Bartek >
Bartek Dajewski - 11-05-2007 12:33
Cześć.
Użytkownik "natukafszy" <kusiczka22@wp.pl> napisał w wiadomości news:f1vao5$5t9$1@nemesis.news.tpi.pl... > Moze to ktos zakodowac tak dla przykladu dla mnie :) ?
Na przykład tak:
if exists (select * from deleted where x <> 0) begin raiserror('exc1', 16, 1) rollback transaction end else if (select max(id) from deleted) < (select max(id) from tabela) begin raiserror('exc2', 16, 1) rollback transaction end
Zwróć też uwagę, że pseudo tabela deleted zawiera wszystkie usuwane rekordy, za to nie widać ich już w tabeli. Jest to więc coś na kształt "after delete" z możliwością wycofania transakcji. Przy okazji: sprawdzanie "x is not null and x <> 0" jest nadmiarowe. Wystarczy "x <> 0".
-- Pozdrawiam :-) Bartek PS. Wycinaj proszę niepotrzebne cytaty i odpowiadaj pod treścią poprzednika.
Bartek Dajewski - 11-05-2007 12:33
Cześć.
Użytkownik "Bartek Dajewski" <bartek@UsunTo.tradiss.com.pl> napisał w wiadomości news:f1vjk0$5fu$1@news.onet.pl... [...] > if (select max(id) from deleted) < (select max(id) from tabela) begin
Powinno być raczej: if (select min(id) from deleted) < (select max(id) from tabela) begin
-- Pozdrawiam :-) Bartek
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Zdalny =?ISO-8859-2?Q?dost=EAp_do_MSSQL_bez_zarz=B1dzani?==?ISO-8859-2?Q?a?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
[MSSQL 2k] - jak =?ISO-8859-2?Q?pod=B3=B1czy=E6_serwer_na_?==?ISO-8859-2?Q?porcie_innym_ni=BF_1433=3F?=
MSSQL Express czy Oracle Express
MSSQL 2005 i uruchamianie procedury o =?ISO-8859-2?Q?okre=B6lone?==?ISO-8859-2?Q?j_godzinie?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
[MSSQL 2000] =?ISO-8859-2?Q?wywo=B3anie_procesu_z_poziomu_?==?ISO-8859-2?Q?job=27a?=
[MSSQL 2K] =?ISO-8859-2?Q?Wp=B3yw_ustawie=F1_regionalnych_?==?ISO-8859-2?Q?serwera_na_zapytania?=
Pobierananie danych z innej bazy danych w MSSQL
Migracja MSSQL 2005 CTP na 2005 Express
zanotowane.pldoc.pisz.plpdf.pisz.plbajkomoda.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|