2011-10-19 9 views

Odpowiedz

11

Tak, można z pewnością więcej niż jeden wyzwalacz dla każdej operacji, na przykład AFTER INSERT lub AFTER UPDATE itd. To nie ma sensu, aby podzielić się oddzielne obawy w osobne, małe, zarządzaniu kawałki kodu.

Jedną z rzeczy, na której nie można polegać, jest to, że zostaną wykonane w określonej kolejności - kolejność, w której wyzwalacze są rzeczywiście wykonywane, również nie musi być stabilna, tj. Taka sama za każdym razem.

+3

Zależy od RDBMS. Postgres gwarantuje, że wiele wyzwalaczy jest wywoływanych w kolejności alfabetycznej nazwy. Podają, że standard SQL (rzadko stosowany) jest w porządku tworzenia. –

+1

@AndrewLazarus: Miałem na myśli SQL Server (ponieważ OP o to pytał), a SQL Server nie ma takiej możliwości. Dzięki za wskazanie tego! –

+0

Absolutnie. Często dodajemy takie notatki, że ludzie często lądują tutaj z Google. –

2

to dobra praktyka, bo wtedy można rozbić zmian w czasie na małe kawałki (agile) i dodać lub usunąć je niezależnie od siebie.

+0

BTW jeśli wstawić 2 lub więcej wierszy naraz (w zasadzie jestem importującego kilka rekordów), czy istnieje sposób mogę odwołać każdej wkładki lub spust jest automatycznie wykonywana dla każdego insertu? –

+1

@hmd wyzwalania będzie automatycznie wykonywane dla każdej wkładki aż i jeśli używasz wkładki luzem, w którym spust będzie wykonywana raz dla każdego polecenia insert luzem. – Niraj

+0

Wiesz, że to stare pytanie! W wyzwalaczu zawsze możesz odwoływać się do tabeli o nazwie "wstawiona", która zawiera wszystkie wiersze, które właśnie wstawiłeś (jeden lub więcej wierszy na wyzwalaczu wstawiania). Tworząc kursory możesz przechodzić przez każdy z twoich wierszy i robić dla nich rzeczy, jeśli chcesz. – olf