Naruszenie zasad FK
Doker - 05-09-2007 00:21
Naruszenie zasad FK
Mamy taka sytuacje Tabela Uzytkownicy: id int, username varchar(max), .... Tabela Listy: id int, id_od int, id_do Baza MSSQL 2005 Jaja sa nastepujace. id_do jest FK na uzytkownicy.id Silnik bazy nie pozwala stworzyc drugiego FK dla id_od. Silnik bazy nie pozwala umieszczac w check constraint wyrazenia select Silnik bazy wspiera triggery ale tylko post-operacyjne, a zreszta i tak bym chcial blad miec zgloszony zamiast dostac ciche milczenie.
Co moge zrobic?
wloochacz - 06-09-2007 00:04
[ciach] > Baza MSSQL 2005 > Jaja sa nastepujace. > id_do jest FK na uzytkownicy.id > Silnik bazy nie pozwala stworzyc drugiego FK dla id_od. > Silnik bazy nie pozwala umieszczac w check constraint wyrazenia select > Silnik bazy wspiera triggery ale tylko post-operacyjne, a zreszta i tak > bym chcial blad miec zgloszony zamiast dostac ciche milczenie. > > Co moge zrobic? Napisać trigger, na ten przykład...
/* Insert trigger "ti_ALM_TASK" for table "ALM_TASK" */ CREATE TRIGGER [dbo].[ti_ALM_TASK] ON [dbo].[ALM_TASK] FOR INSERT AS begin
declare @numrows int select @numrows = @@rowcount if @numrows = 0 return SET NOCOUNT ON /* Restrict child "ALM_TASK" when parent "DEX_RM_USERS" insert */ if update([ID_USER_C]) begin if ((select count(*) from inserted i left join [DEX_RM_USERS] t on (t.[ID_USER] = i.[ID_USER_C]) where (t.[ID_USER] = i.[ID_USER_C]) or (i.[ID_USER_C] is null)) != @numrows) begin raiserror 50004 'Wartość nadrzędna nie istnieje w tabeli [DEX_RM_USERS]. Nie mogę wstawić wartości do tabeli podrzędnej [ALM_TASK].' rollback transaction return end end SET NOCOUNT OFF end GO
-- wloochacz
Doker - 06-09-2007 00:04
wloochacz pisze: > [ciach] >> Baza MSSQL 2005 >> Jaja sa nastepujace. >> id_do jest FK na uzytkownicy.id >> Silnik bazy nie pozwala stworzyc drugiego FK dla id_od. >> Silnik bazy nie pozwala umieszczac w check constraint wyrazenia select >> Silnik bazy wspiera triggery ale tylko post-operacyjne, a zreszta i >> tak bym chcial blad miec zgloszony zamiast dostac ciche milczenie. >> >> Co moge zrobic? > Napisać trigger, na ten przykład... Blee ;p no chyba trzeba ale to normalnie straszne ;) No i trzeba on insert i on update ;/ Ale dzieki
wloochacz - 06-09-2007 00:04
[ciach] >>> Co moge zrobic? >> Napisać trigger, na ten przykład... > Blee ;p no chyba trzeba ale to normalnie straszne ;) Ale to jest tylko propozycja, nikt Ci nie każe tak robić.
> No i trzeba on insert i on update ;/ CREATE TRIGGER [dbo].[ti_ALM_TASK] ON [dbo].[ALM_TASK] FOR INSERT, UPDATE
Są jeszcze triggery Instead Of, he he
> Ale dzieki No, ku..., proszę.
-- wloochacz
Doker - 06-09-2007 00:04
> Są jeszcze triggery Instead Of, he he Mowisz? Jakis marny artykul wprowadzil mnie wblad gdyz jego autor twierdzil ze mssql 2005 wspiera tylko triggery post. No teraz to you saved my day :) thx
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[PostgreSQL] Komunikaty w sytuacji naruszenia=?iso-8859-2?Q?ogranicze=F1?= kluczy
ORA-02291:naruszono wiezy integralnosci
Oracle blad naruszono wiezy unikatowe
w kwestii naruszenia praw...
[PG 8.3] - oid jako PK/FK w systemie rozproszonym.
Program Polsoft FK i pliki .dbf :/
[ORACLE] Zapytanie SQL
Archiwizacja MSSQL.
prostokat do wycinania z plikow...
W jakiej postaci wystepuje report builder for oracle?
zanotowane.pldoc.pisz.plpdf.pisz.plets2.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 |
|