Wydaje się, że są one dozwolone, ponieważ widzę oba moje wyzwalacze wstawiania pod tabelą o różnych nazwach. Czy to powszechna czy zła praktyka? Używam programu SQL Server 2005Czy mogę mieć dwa różne wyzwalacze wstawiania w tej samej tabeli?
Odpowiedz
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.
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. –
@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! –
Absolutnie. Często dodajemy takie notatki, że ludzie często lądują tutaj z Google. –
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.
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? –
@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
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
Czego wyzwalacze zrobić? Tabela "INSERTED" nie jest indeksowana, więc ze względu na wydajność może być lepiej je skonsolidować. –