En realidad, esto no funcionará, ya que no puede tener el nombre de la columna entre comillas. Básicamente, lo que está haciendo es hacer que SQL compare dos cadenas que siempre serán diferentes, lo que significa que nunca realizará una actualización.
Si debe hacerlo de esta manera, debe tener algo como...
DECLARE @a INT
DECLARE @b VARCHAR
SET @a = 1
WHILE @a < 30
BEGIN
set @b = @a
exec sp_executesql N'UPDATE source set h = h + 'x_'[email protected] + N'
where y_'[email protected] + N' = ''Sold'''
SET @a = @a + 1
END
En general, sin embargo, desaconsejaría esta práctica. No soy un fanático del SQL dinámico que se genera dentro de otra declaración SQL para ningún tipo de código de producción. Muy útil para realizar tareas de desarrollo únicas, pero no me gusta para el código que un usuario podría ejecutar.