Usuwanie rekordów z powiązanej tabeli
KA-RAM-BA - 25-05-2006 00:50
Usuwanie rekordów z powiązanej tabeli Mam do Was pytanie. Nie bardzo wiem jak zapytać. Ale może zrozumiecie mnie i pomozecie.
MSDE
Tworzę sobie "przykładowo" dwie tabele: Czytelenicy i Ksiazki
CREATE TABLE [dbo].[Czytelnicy] ( [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL , [Imie] [varchar] (35) COLLATE Polish_CI_AS NOT NULL , [Nazwisko] [varchar] (55) COLLATE Polish_CI_AS NOT NULL ) ON [PRIMARY] GO
CREATE TABLE [dbo].[Ksiazki] ( [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL , [ID_Czytelnika] [int] NOT NULL , [Tytul] [varchar] (150) COLLATE Polish_CI_AS NOT NULL , [Autor] [varchar] (80) COLLATE Polish_CI_AS NOT NULL ) ON [PRIMARY] GO
Co trzeba dopisać by te tabele były ze sobą powiązane w ten sposób, że jak usunę z tabeli Czytelnicy jakiegoś czytelnika to z tabeli Ksiązki zostaną też usuniete automatycznie wszystkie rekordy odnoszą ce się do danego czytelnika?
-- KA-RAM-BA
Radosław Witkowicki - 25-05-2006 00:50
> Mam do Was pytanie. Nie bardzo wiem jak zapytać. Ale może zrozumiecie mnie > i > pomozecie. > > MSDE > > Tworzę sobie "przykładowo" dwie tabele: Czytelenicy i Ksiazki > > CREATE TABLE [dbo].[Czytelnicy] ( > [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL , > [Imie] [varchar] (35) COLLATE Polish_CI_AS NOT NULL , > [Nazwisko] [varchar] (55) COLLATE Polish_CI_AS NOT NULL > ) ON [PRIMARY] > GO > > CREATE TABLE [dbo].[Ksiazki] ( > [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL , > [ID_Czytelnika] [int] NOT NULL , > [Tytul] [varchar] (150) COLLATE Polish_CI_AS NOT NULL , > [Autor] [varchar] (80) COLLATE Polish_CI_AS NOT NULL > ) ON [PRIMARY] > GO > > Co trzeba dopisać by te tabele były ze sobą powiązane w ten sposób, że jak > usunę z tabeli Czytelnicy jakiegoś czytelnika to z tabeli Ksiązki zostaną > też usuniete automatycznie wszystkie rekordy odnoszą ce się do danego > czytelnika?
Najlepiej stworzyć triger-a. A jak się robi trigera to zajrzyj do dokumentacji. Nie znam sie na MSSQL.
Pozdro
Artur Muszynski - 25-05-2006 00:50
=?iso-8859-2?Q?Re:_Usuwanie_rekord=F3w_z_powi=B1zanej_tabeli? =
"Radosław Witkowicki" <rwitkowicki@UsunTo_yahoo.co.uk> wrote in message news:e52ft0$486$1@nemesis.news.tpi.pl... >> Co trzeba dopisać by te tabele były ze sobą powiązane w ten sposób, że >> jak >> usunę z tabeli Czytelnicy jakiegoś czytelnika to z tabeli Ksiązki zostaną >> też usuniete automatycznie wszystkie rekordy odnoszą ce się do danego >> czytelnika? > > Najlepiej stworzyć triger-a. A jak się robi trigera to > zajrzyj do dokumentacji. Nie znam sie na MSSQL.
Skoro się nie znasz, to po co piszesz?
CREATE TABLE Czytelnicy ( ID int IDENTITY (1, 1) NOT NULL , Imie varchar (35) NOT NULL , Nazwisko varchar (55) NOT NULL , CONSTRAINT PK_Czytelnicy PRIMARY KEY (ID) )
CREATE TABLE Ksiazki ( ID int IDENTITY (1, 1) NOT NULL , ID_Czytelnika int NOT NULL , Tytul varchar (150), Autor varchar (80), CONSTRAINT PK_Ksiazki PRIMARY KEY (ID), CONSTRAINT FK_Ksiazki_Czytelnicy FOREIGN KEY (ID_Czytelnika) REFERENCES Czytelnicy (ID) ON DELETE CASCADE )
artur
R.A.M. - 28-06-2006 00:09
>Najlepiej stworzyć triger-a. A jak się robi trigera to >zajrzyj do dokumentacji. Nie znam sie na MSSQL.
Następujący trigger usuwa Wydania konkretnej Książki.
ALTER TRIGGER [DeleteKsiążka] ON [dbo].[Książki] AFTER DELETE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Usuń wydania książki: DELETE FROM Wydania WHERE Wydania.ISBN IN (SELECT ISBN FROM deleted); END
Marek TROFIMIUK - 28-06-2006 00:09
R.A.M. <r_ahimsa_m@poczta.onet.pl> wrote: >>Najlepiej stworzy? triger-a. A jak si? robi trigera to >>zajrzyj do dokumentacji. Nie znam sie na MSSQL. > > Nast?puj?cy trigger usuwa Wydania konkretnej Ksi??ki. > > ALTER TRIGGER [DeleteKsi??ka] > ON [dbo].[Ksi??ki] > AFTER DELETE > AS > BEGIN > -- SET NOCOUNT ON added to prevent extra result sets from > -- interfering with SELECT statements. > SET NOCOUNT ON; > -- Usu? wydania ksi??ki: > DELETE FROM Wydania > WHERE Wydania.ISBN IN (SELECT ISBN FROM deleted); > po co tak kombinować?? czy w mssql nie można założyć kluczy obcych z opcją on delete cascade??
p.
-- Marek Trofimiuk < mt20863 (at) sgh waw pl > Primary key fingerprint: FA3C 14D8 020F FA0C 70AE 930C F63F F04B 2ADD 9DD7
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Tworzenie tabeli z =?ISO-8859-2?Q?nazw=B1_ustalan=B1_przez_?==?ISO-8859-2?Q?usera?=
=?ISO-8859-2?Q?Zawarto=B6=E6_tabeli_na_podstawie_warto=B6?==? ISO-8859-2?Q?ci_w_innej?=
Jak =?ISO-8859-2?Q?zamieni=E6_dwa_pola_jednej_kolumny_?==?ISO-8859-2?Q?w_dw=F3ch_rekordach_za_pomoc=B1_jednego_zapyt? ==?ISO-8859-2?Q?ania=3F?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?=
[MySQL] Skopiowanie =?ISO-8859-2?Q?warto=B6ci_z_jednego_po?==?ISO-8859-2?Q?la_do_drugiego_w_jednej_tabeli=2C_r=F3=BFne_?= =?ISO-8859-2?Q?wiersze=2E?=
zanotowane.pldoc.pisz.plpdf.pisz.plnocnerozmowy.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 |
|