To nie zadziała, ponieważ nie możesz umieścić nazwy kolumny w cudzysłowie. Zasadniczo SQL porównuje dwa ciągi, które zawsze będą różne, co oznacza, że nigdy nie wykonasz aktualizacji.
Jeśli musisz to zrobić w ten sposób, musiałbyś mieć coś takiego...
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
Generalnie jednak odradzałbym tę praktykę. Nie jestem fanem dynamicznego SQL generowanego wewnątrz innej instrukcji SQL dla jakiegokolwiek kodu produkcyjnego. Bardzo przydatne do wykonywania jednorazowych zadań programistycznych, ale nie lubię tego w przypadku kodu, który mógłby zostać wykonany przez użytkownika.