DECLARE @sql NVARCHAR(max)
DECLARE @ParmDefinition NVARCHAR(500)
SET @sql = 'UPDATE [Table1] SET [Table1].[@columnName] = TEST';
SET @ParmDefinition = N'@columnName NVARCHAR(50)';
EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'MyColumn';
Когда я запускаю вышеуказанный запрос, я получаю Invalid column name '@columnName'.
. Очевидно, что имя столбца не заменяется при выполнении запроса.Динамическое имя столбца в SQL в заявлении об обновлении
В действительности, моя переменная @sql намного больше, и у меня есть много столбцов, которые я хочу обновить, поэтому я бы хотел избежать SET SQL =
для всех перечислений имени столбца.
Я хотел бы объявить строку sql один раз и вызвать запрос с разными значениями. например:
EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'MyColumn';
EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'AnotherColumn';
EXEC sp_executesql @sql, @ParmDefinition, @columnName = N'YetAnotherColumn';
-- And so on
Возможно ли это как можно?
Я хочу, чтобы иметь возможность запускать '' sp_executesql и кормить '@ columnName' с разными значениями, хотя. –
В действительности моя переменная @sql намного больше. Я хотел бы объявить строку sql один раз и вызвать запрос с разными значениями. –
Хорошо, я понимаю, что вы имеете в виду. Вы можете попробовать решение Xedni, или я отредактирую свой ответ другим решением, которое мы использовали в прошлом. –