Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mssql] wyzwalacz usuwający pracowników...
beel
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 20.04.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Kicok 3.05.2007, 08:48:32


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
beel
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 20.04.2007

Ostrzeżenie: (0%)
-----


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 ...
Go to the top of the page
+Quote Post
Kicok
post
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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';


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
beel
post
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 20.04.2007

Ostrzeżenie: (0%)
-----


Nie przeczytałem ze zrozumieniem, teraz kumam dzięki, działa. tylko jedno jesszcze pytanie co robi linijka:

  1. INSTEAD OF DELETE



?

Ten post edytował beel 3.05.2007, 15:28:15
Go to the top of the page
+Quote Post
Kicok
post
Post #6





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 00:47