列名を引用符で囲むことはできないため、これは実際には機能しません。基本的に行っていることは、常に異なる 2 つの文字列を SQL で比較することです。つまり、更新を実行することはありません。
このようにしなければならない場合は、次のようなものを用意する必要があります...
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
ただし、一般的には、この方法はお勧めしません。私は、あらゆる種類の本番コード用に別の SQL ステートメント内で生成される動的 SQL のファンではありません。 1 回限りの開発タスクを行うには非常に便利ですが、ユーザーが実行できるコードには適していません。