Acabo de volver a leer su pregunta antes de publicar esto. Si bien esta técnica probablemente no se puede aplicar directamente a .net, es posible que pueda resolver algo similar. Entonces:
Recientemente tuve que hacer una gran cantidad de codificación dinámica en T-SQL, y he creado la siguiente rutina. Suponemos que tienes un trozo de código de este 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
Esto es por supuesto muy simplisitc - si usted tiene que hacer código dinámico, que va a tener consultas complejas a tremendamente compleja, y como se He descubierto que esto puede ser muy difícil de depurar. Así es como me gustaría volver a escribir el código anterior:
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
Esto es código extra para escribir y depurar, pero una vez que esté en su lugar de trabajo y que puede ser muy valiosa en situaciones de depuración. Si es parte de un procedimiento almacenado, haga de @Debug un parámetro predeterminado en 0 y asegúrese de que si se establece en 2, el procedimiento en realidad no hace nada.
genial ... ¡esto ayuda mucho! – Toad