Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Debugowanie długiego dynamicznego sql w SQL Server 2008

Gdy zostaniemy zmuszeni do użycia dynamicznego sql w zapisanym proc, wykonujemy następujące czynności. dodaj zmienną wejściową debugowania, która jest polem bitowym. Jeśli jest to 0, instrukcja exec zostanie przetworzona, jeśli będzie to 1, zamiast tego otrzymasz instrukcję print. Proponuję zrobić coś podobnego do debugowania. Zamiast wykonywać, wydrukuj wyniki swojego kodu SQL lub ewentualnie wstaw SQl do tabeli, ponieważ wydaje się, że dzieje się to w pętli. Następnie możesz przejrzeć zbudowany sql i zobaczyć, gdzie poszło nie tak.

Declare debug bit
set debug = 1

...
if debug = 1 Begin     Print @SQL End
Else 
Begin Exec (@sql) End

Alternatywnie

Utwórz tabelę o nazwie mydynamiccode_logging (z kolumną sql o tej samej długości co instrukcja max sql, kolumną rundate i innymi kolumnami, które uznasz za niezbędne (rozważę zmienne wejściowe użyte do utworzenia instrukcji sql, użytkownika, aplikacji jeśli więcej niż jeden używa tego fragmentu kodu)

Przed uruchomieniem instrukcji exec uruchom coś takiego:

insert mydynamiccode_logging (sql, rundate)
values (@sql, getdate()) 

Teraz możesz również dodać pole bitu debugowania i rejestrować tylko wtedy, gdy zmieniłeś go w tryb debugowania lub zawsze możesz logować, w zależności od systemu i ile dodatkowego czasu to zajmuje i jak trzaśnięta jest reszta systemu. Nie chcesz znacząco spowalniać prod przez logowanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zrozumienie SQL Server zawsze szyfrowane

  2. Dodaj logowanie do serwera połączonego w programie SQL Server (przykład T-SQL)

  3. Czy rozmiar używany z NVARCHAR ma znaczenie?

  4. Brak udostępnionych zestawów danych w eksploratorze rozwiązań w studiu rozwoju analizy biznesowej

  5. Techniki materializacji T-SQL CTE nie działają na SQL Server 2012