Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Отстраняване на грешки в дълъг динамичен sql в SQL Server 2008

Когато сме принудени да използваме динамичен sql в съхранена процедура, ние правим следното. добавете входна променлива на debug, която е битово поле. Ако е 0, командата exec ще обработи, ако е 1, тогава вместо това ще получите команда за печат. Предлагам ви да направите нещо подобно за отстраняване на грешки. Вместо да изпълнявате, отпечатайте резултатите от вашия SQL или евентуално вмъкнете SQl в таблица, тъй като изглежда, че се случва в цикъл. След това можете да прегледате изградения sql и да видите къде се е объркал.

Declare debug bit
set debug = 1

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

Алтернативно

Създайте таблица, наречена mydynamiccode_logging (с sql колона със същата дължина като max sql израза, rundatecolumn и каквито други колони може да сметнете за необходими (бих разгледал входните променливи, използвани за съставяне на sql израза, потребителя, приложението ако повече от един използва тази част от кода)

Преди да изпълните командата exec, изпълнете нещо подобно:

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

Сега можете също да добавите битовото поле за отстраняване на грешки и да регистрирате само когато сте го променили на режим за отстраняване на грешки или винаги можете да влезете, зависи от системата и колко допълнително време отнема това, за да направите това и колко е затлачена останалата част от системата. Не искате да забавяте значително prod чрез регистриране.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да намеря работещ порт на SQL Server?

  2. Изчислете общата цена на притежание за мониторинг на SQL Server

  3. SQL:Какво е по-добре бит или символ (1)

  4. Създаване на база данни програмно в SQL Server

  5. Възстановете лесно база данни на SQL – ръководство стъпка по стъпка