sql >> Databáze >  >> RDS >> Sqlserver

Ladění dlouhých dynamických sql v SQL Server 2008

Když jsme nuceni použít dynamický sql v uloženém procesu, uděláme následující. přidejte vstupní proměnnou ladění, což je bitové pole. Pokud je 0, příkaz exec zpracuje, pokud je 1, pak místo toho dostanete výpis tisku. Navrhuji, abyste pro ladění udělali něco podobného. Místo provádění vytiskněte výsledky svého SQL nebo případně vložte SQL do tabulky, protože se zdá, že se to děje ve smyčce. Pak se můžete podívat na vytvořený SQL a zjistit, kde se stala chyba.

Declare debug bit
set debug = 1

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

Případně

Vytvořte tabulku nazvanou mydynamiccode_logging (se sloupcem sql o stejné délce jako příkaz max sql, sloupcem rundatecolumn a dalšími sloupci, které byste mohli považovat za nezbytné (zvážil bych vstupní proměnné použité k vytvoření příkazu sql, uživatel, aplikace pokud tento kus kódu používá více než jeden)

Před spuštěním příkazu exec spusťte něco takového:

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

Nyní můžete také přidat pole bitu ladění a protokolovat pouze tehdy, když jste jej změnili na režim ladění, nebo můžete protokolovat vždy, záleží na systému a na tom, kolik času to navíc zabere a jak je zbytek systému zabouchnutý. Nechcete výrazně zpomalit prod protokolováním.



  1. Jak vytvořit n-gram v postgresql

  2. AKTUALIZACE ODP.NET... NÁVRAT DO... více řádků, typ parametru

  3. Při importu CSV přeskočte záhlaví nebo první řádek

  4. Načtěte data z CSV do bitového pole v mysql