Я просто перечитал ваш вопрос, прежде чем опубликовать это. Хотя эту технику, вероятно, нельзя напрямую применить к .net, вы можете разработать нечто подобное. Итак:
Недавно мне пришлось много заниматься динамическим кодированием в T-SQL, и я придумал следующую процедуру. Предположим, у вас есть кусок кода примерно так:
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
Это, конечно, очень просто - если вам нужен динамический код, у вас будут сложные или дико сложные запросы, и, как вы обнаружили, их может быть очень сложно отладить. Вот как я бы переписал приведенный выше код:
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
Это дополнительный код для написания и отладки, но когда он работает и работает, он может оказаться неоценимым в ситуациях отладки. Если это часть хранимой процедуры, задайте для параметра @Debug значение по умолчанию 0 и убедитесь, что при значении 2 процедура на самом деле ничего не делает.