Dies funktioniert nicht wirklich, da Sie den Spaltennamen nicht in Anführungszeichen setzen können. Was Sie im Wesentlichen tun, ist, dass SQL zwei Strings vergleicht, die immer unterschiedlich sein werden, was bedeutet, dass Sie niemals eine Aktualisierung durchführen werden.
Wenn Sie es auf diese Weise tun müssen, müssen Sie etwas wie ...
habenDECLARE @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
Generell würde ich aber von dieser Praxis abraten. Ich bin kein Fan von dynamischem SQL, das innerhalb einer anderen SQL-Anweisung für irgendeine Art von Produktionscode generiert wird. Sehr nützlich für einmalige Entwicklungsaufgaben, aber ich mag es nicht für Code, der von einem Benutzer ausgeführt werden könnte.