Próbuję debugować dość skomplikowany ewaluator formuły napisany w UDF T-SQL (nie pytaj), że rekursywnie (ale pośrednio poprzez funkcję pośrednią) nazywa się, bla , bla.Jak śledzić wywołania funkcji T-SQL
I, oczywiście, mamy błąd.
Teraz, używając instrukcji PRINT (które można następnie odczytać z ADO.NET poprzez implementację programu obsługi zdarzenia InfoMessage), mogę zasymulować śledzenie procedur składowanych.
robi to samo dla UDF skutkuje komunikatem czasu kompilacji:
Invalid use of side-effecting or time-dependent operator in 'PRINT' within a function.
dostaję komunikat (druk robi pewne rzeczy jak resetowanie @@ROWCOUNT
który zdecydowanie jest nie-nie w UDF, ale jak mogę śladu ? pośrednictwem połączeń Chcę mieć ten ślad wydrukowany, więc mogę uczyć się go bez uzyskiwania rozproszony poprzez intensyfikację przez połączeń w debugera ...
EDIT: próbowałem użyć SQL Profiler (ta był dla mnie po raz pierwszy), ale nie potrafię wymyślić, na co mam uważać: Alt hough Mogę uzyskać śledzenie wyjściowe kwerendy wysyłane do bazy danych, są one nieprzezroczyste w tym sensie, że nie mogę drążyć do wyrażenia UDF o nazwie: Mogę wyśledzić rzeczywistą procedura składowana wywoływana, ale UDFs wywoływane przez to procedura nie są wymienione. Czy czegoś brakuje? Chyba nie ...
EDIT # 2: Allthough mierzy się (auto-) przyjął odpowiedź robi prześledzić funkcja nazywa - bardzo pomocne, dzięki - to nie pomaga w ustaleniu, jakie parametry były przeszedł do funkcjonować. Jest to oczywiście niezbędne w funkcjach rekursywnych debugowania. Będę publikować, jeśli znajdę jakiekolwiek rozwiązanie ...
Tak, sprawdź odpowiedź Matthieu poniżej, która wyjaśnia, jakie wydarzenia musisz dodać w ustawieniach Profila. Domyślnie przechwytuje tylko kilka zdarzeń i nie są one potrzebne do rozwiązywania problemów. –