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.