In realtà non funzionerà, poiché non puoi avere il nome della colonna tra virgolette. Quello che stai essenzialmente facendo è fare in modo che SQL confronti due stringhe che saranno sempre diverse, il che significa che non eseguirai mai un aggiornamento.
Se devi farlo in questo modo, dovresti avere qualcosa del tipo...
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
In generale, tuttavia, sconsiglierei questa pratica. Non sono un fan dell'SQL dinamico generato all'interno di un'altra istruzione SQL per qualsiasi tipo di codice di produzione. Molto utile per svolgere attività di sviluppo una tantum, ma non mi piace per il codice che potrebbe essere eseguito da un utente.