Po prostu ponownie przeczytałem twoje pytanie przed opublikowaniem tego. Chociaż ta technika prawdopodobnie nie może być bezpośrednio zastosowana do .net, być może uda ci się wypracować coś podobnego. A więc:
Niedawno musiałem wykonać wiele dynamicznego kodowania w T-SQL, a ja wymyśliłem następującą procedurę. Załóżmy, że masz kawałek kodu tak:
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
Jest to oczywiście bardzo simplisitc - jeśli trzeba zrobić kod dynamiczny, masz zamiar mają złożone do szalenie skomplikowane zapytania, a jak ty "odkryłem, że może to być bardzo trudne do debugowania. Oto jak ja przepisać powyższy kod:
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
Jest to dodatkowy kod do pisania i debugowania, ale kiedy to w miejscu pracy i mogą być nieocenione w sytuacjach debugowania. Jeśli jest to część procedury składowanej, ustaw parametr @Debug na wartość domyślną 0 i upewnij się, że jeśli ustawiono wartość 2, procedura nic nie robi.
Świetne ... to bardzo pomaga! – Toad