Dit zal niet echt werken, omdat de kolomnaam niet tussen aanhalingstekens mag staan. Wat u in wezen doet, is dat SQL twee strings vergelijkt die altijd verschillend zullen zijn, wat betekent dat u nooit een update zult uitvoeren.
Als je het op deze manier moet doen, zou je iets moeten hebben als...
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
Over het algemeen zou ik deze praktijk echter ontmoedigen. Ik ben geen fan van dynamische SQL die wordt gegenereerd in een andere SQL-instructie voor welke productiecode dan ook. Erg handig voor het uitvoeren van eenmalige ontwikkelingstaken, maar ik hou er niet van voor code die door een gebruiker kan worden uitgevoerd.