Usuwanie zawartości tabeli

0

Jak usunąć zawartość tabeli w mssql mimo że są w niej klucze ?

0

Tzn chciałbyś usunąć rekordy z tabeli, ale istnieją rekordy w innych tabelach które się z nimi łączą i jednoczesnie relacja jest ustawiona jako obowiązkowa?
Sprawdź czy możesz zmienić tą relację na opcjonalną, ale to grozi utratą spójności bazy. Możesz też zobaczyć czy nie ma opcji kasowania kaskadowego (o tyle ryzykowne że może ci skasować b. dużo...)

0

Można też najpierw usunąć powiązane rekordy.

0

Jedyne słuszne wyjście to uprzednie usunięcie rekordów z tabel powiązanych.

0
AdamPL napisał(a)

Jedyne słuszne wyjście to uprzednie usunięcie rekordów z tabel powiązanych.

To tak, tyle że kasowanie kaskadowe działa dokładnie na tej samej zasadzie - kasuje naprzód rekordy z tabel powiązanych.

0

Ale nie masz kontroli co dokładnie jest kasowane i z jakich tabel. Kasując rekordy "ręcznie" jesteśmy w stanie bardziej obiektywnie ocenić czy skasowanie konkretnych danych z konkretnych tabel jest właściwe czy nie.

0
Mariusz Jędrzejowski napisał(a)

To tak, tyle że kasowanie kaskadowe działa dokładnie na tej samej zasadzie - kasuje naprzód rekordy z tabel powiązanych.

I efekt prawie taki jak drop database. ;)

0

Dosyć często spotkałem się z kasowaniem kaskadowym i oczywiście daje się ostrzeżenie że skasowanie rekordu spowoduje skasowanie rekordu w powiązanych tabelach. W prostszych przypadkach, gdy rekordy w tabelach podrzędnych nie są ważne, można z powodzeniem zastosować kasowanie kaskadowe, inaczej musielibyśmy sprawdzać w dosyć skomplikowany sposób warunki kasowania (które mogą być różne za każdym razem) szczególnie jeśli powiązanych tabel podrzędnych jest kilkanaście poprzez rozgałęzienia drzewa powiązań.

Niektórzy zamiast kasować zaznaczają rekord jako nieaktywny (do celów archiwizacji wymaganych przez szkoły, banki itp). Jeśli jednak jest wiele tabel podrzędnych to wszystkie powiązane rekordy też trzeba zaznaczyć w BEFORE UPDATE i wymianiać w wyzwalaczu tabele podrzędne robiąc ich analogiczny uddate odpowiedniego pola jako nieaktywne i we wszystkich tabelach podrzędnych zrobić to samo w ich wyzwalaczach.

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