Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [trigger] rekurencja - usuwanie
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
jastu
Witam,
Struktura w tabeili wygląda tak (tree) (mssql 2005)
  1. id   |   parent_id    |   name
  2. ----------------------------
  3. 1    |  0               | Nazwa_1
  4. 2    |  1               | Nazwa_2
  5. 3    |  1               | Nazwa_3
  6. 4    |  2               | Nazwa_4


jak ładnie usunąć rekokrd o id = 1, tak by zostały usunięte rekordy podrzedne w strukturze ? Wstawianie do tabeli ograniczyłem wyzwalaczem, który sprawdza zagłębienie w strukturze, i wstawia rekord na max n+2 (lub zwraca błąd).
Można to zgrabnie zrobić ?
Gomes
Przy tworzeniu tabeli trzeba pamiętać, żeby zadeklarować klucz obcy:

  1. CREATE TABLE nazwa_tabeli
  2. (
  3. id INTEGET AUTO_INCREMENT PRIMARY KEY,
  4. name VARCHAR(50) NOT NULL,
  5. parent_id INTEGER,
  6. FOREGIN KEY (parent_id) REFERENCES druga_tabela(parent_id) ON DELETE CASCADE
  7. ) ENGINE = InnoDB;


Tabele muszą być obsługiwane przez mechanizm InnoDB!!!
jastu
Oracuję na MSSQL 2005, do tego ma to być jedna tabela, która odwzoruje całą strukturę
john_doe
nie wiem czy dobrze rozumiem o co Ci chodzi. Mam brać pod uwagę tylko tabelę która przedstawiłeś? Jeśli tak to musisz napisać procedure a potem np wpakować ja w wyzwalacz.

  1. SET QUOTED_IDENTIFIER ON GO
  2. SET ANSI_NULLS ON GO
  3.  
  4.  
  5. CREATE procedure deleteRecords ( @p_id int )
  6. AS declare @ajdi int;
  7.  
  8. SELECT @ajdi = id FROM twojaTabela WHERE id = @p_id;
  9.  
  10. IF @ajdi IS NOT NULL
  11. begin DELETE FROM twojaTabela WHERE id = @ajdi;
  12. DELETE FROM twojaTabela WHERE parenent_id = @ajdi;
  13.  
  14. end;
  15.  
  16.  
  17. GO
  18. SET QUOTED_IDENTIFIER OFF
  19. GO
  20. SET ANSI_NULLS ON GO


parrenty trzymasz w innej tabeli wiec latwo to dodac do precedury, lub wyzwalacz ktory sprawdza powiazanie. O to chodzi. Jeśli nie napisz to się pomyśli.

pozdro Krystian
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.