Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mssql] wyzwalacz usuwający pracowników...
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
beel
Witam!
Za pomoca wyzwalacza chce zrealizowac usuwanie pracownikow (z kazdej tabeli informacje o danym pracowniku maja zostac suuniete). Ale na poczatek chce usunac z jednej tylko tabeli, i napisalem w tym celu taki wyzwalacz:

  1. CREATE TRIGGER [dbo].[usun_wsio]
  2. ON [dbo].[DaneOsobowe]
  3. INSTEAD OF DELETE
  4.  
  5. AS BEGIN SET NOCOUNT ON;
  6. DELETE DaneOsobowe WHERE Imie='Basia'
  7. END
  8. GO


Ale jak go mam zmusic do usuniecia danych z tabeli ? Daje EXECUTE, i komunikat ze wszystko okay, a dane dalej są w tabeli.
Kicok
Trigger ten będzie wyzwalany zamiast każdego wywołania
  1. DELETE FROM DaneOsobowe

Dodatkowo wewnątrz triggera utworzona jest tablica tymczasowa: deleted, która zawiera wiersze do usunięcia. Na przykład dla zapytania:
  1. DELETE FROM DaneOsobowe WHERE Imie='Basia'

tabela deleted zawierać będzie wszystkie wiersze z tabeli [DaneOsobowe], w których pole [Imie] zawiera tekst "Basia".

Najprostszym sposobem będzie zastosowanie w triggerze podzapytań:
  1. DELETE FROM DaneOsobowe WHERE Imie IN (SELECT imie FROM deleted); --
  2. DELETE FROM DrugaTabela WHERE Imie IN (SELECT imie FROM deleted); --
  3. DELETE FROM NtaTabela WHERE Imie IN (SELECT imie FROM deleted);



Możesz też zadeklarować kursor, przejechać nim po wszystkich wierszach tabeli deleted, zapisywać z każdego wiersza wartość pola [imie] do zmiennej i używać jej do usuwania wierszy z tabel.
beel
A w jaki sposób ja mam odpalić (uruchomić) wyzwalacz aby zobaczyć jego działanie? Samo EXECUTE chyba tylko go "kompiluje". Bo jak pisałem podobny na próbę gdzie zakazywano usuwania Osób z tabeli to dopiero uaktywniał się gdy wydałem zapytanie aby usunąć osobę. A tutaj nie wiem jak zobaczyć efekt jego działania ...
Kicok
No przecież napisałem:
Cytat
Trigger ten będzie wyzwalany zamiast każdego wywołania
  1. DELETE FROM DaneOsobowe



Jeśli cię to nie przekonuje to zrób sobie taki trigger:
  1. CREATE TRIGGER [dbo].[usun_wsio]
  2. ON [dbo].[DaneOsobowe]
  3. INSTEAD OF DELETE
  4. AS BEGIN SELECT 'TRIGGER [usun_wsio] dziala!';
  5. END
  6. GO


A następnie sprawdź co zwróci zapytanie:
  1. DELETE FROM DaneOsobowe WHERE Imie='Basia';
beel
Nie przeczytałem ze zrozumieniem, teraz kumam dzięki, działa. tylko jedno jesszcze pytanie co robi linijka:

  1. INSTEAD OF DELETE



?
Kicok
Informuje MSSQL, że instrukcje triggera mają zostać wykonane zamiast zapytania:
  1. DELETE FROM DaneOsobowe



Inne możliwości to: AFTER DELETE / FOR DELETE które informują MSSQL, że instrukcje triggera mają zostać wykonane po wykonaniu zapytania
  1. DELETE FROM DaneOsobowe



Więcej informacji:
http://msdn2.microsoft.com/en-us/library/a...54(sql.80).aspx
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.