Ho appena riletto la tua domanda prima di postarla. Anche se questa tecnica probabilmente non può essere applicata direttamente a .net, potresti essere in grado di elaborare qualcosa di simile. Dunque:
Ho recentemente dovuto fare un sacco di codice dinamico in T-SQL, e ho elaborato la seguente routine. Si supponga che hai un pezzo di codice in questo modo:
DECLARE
@Command nvarchar(max)
,@SearchFor int
SET @Command = 'SELECT * from MyTable where PrimaryKey = @SearchFor'
SET @SearchFor = 1
EXECUTE sp_executesql
@Command
,N'@SearchFor int'
,@SearchFor
Questo è ovviamente molto simplisitc - se avete bisogno di fare codice dinamico, si sta andando ad avere per query complesse selvaggiamente complesse, e come si Ho scoperto che questi possono essere molto difficili da eseguire il debug. Ecco come mi piacerebbe riscrivere il codice di cui sopra:
DECLARE
@Command nvarchar(max)
,@SearchFor int
,@Debug int
-- 0 = Run it
-- 1 = Run and display it
-- 2 = Display it
SET @Command = 'SELECT * from MyTable where PrimaryKey = @SearchFor'
SET @SearchFor = 1
SET @Debug = 1
IF @Debug > 0
-- Show the command that would be run
PRINT replace(@Command, '@SearchFor', cast(@SearchFor as varchar(10)))
IF @Debug < 2
-- Run it
EXECUTE sp_executesql
@Command
,N'@SearchFor int'
,@SearchFor
Si tratta di codice aggiuntivo di scrivere ed eseguire il debug, ma una volta che è in atto e di lavoro può essere prezioso in situazioni di debug. Se fa parte di una procedura memorizzata, imposta @Debug un parametro che assume come valore predefinito 0 e assicurati che, se impostato su 2, la procedura in realtà non esegua nulla.
fonte
2009-08-10 14:15:05
ottimo ... questo aiuta molto! – Toad