2009-10-27 1 views
1

У меня есть следующий код:SQL Update столбцы переходящих в запрос имя столбца и значение

UPDATE myTable 
SET Col1 = @Value 

Однако, у меня есть таблица, которая имеет более чем 100 столбцов и хочу, чтобы иметь возможность указать имя столбца перейдя по имени в запрос, похожий на:

UPDATE myTable 
SET @ColName = @Value 

Когда я это сделаю, я получаю сообщение об ошибке. Есть ли хорошее решение для этого? Вероятно, это просто!

Благодарим вас за продвижение.

ответ

6

Вам придется использовать динамический SQL, и записать его, чтобы убедиться, вы не позволяете Little Bobby Tables в что-то вроде этого:.

DECLARE @sql NVARCHAR(500) 
SET @sql = N'UPDATE myTable SET ' + QUOTENAME(@colName) + ' = @pUpdateVal' 
EXEC sp_ExecuteSQL @sql, '@pUpdateVal NVARCHAR(20)', @value 

Убедитесь, что вы измените тип @pUpdateVal к чему-то соответствующее для вашей среды, но это уменьшит риск инъекционных атак.

+0

+1 для использования параметра –

+0

Разве это не должно быть ОБНОВЛЕНИЕ myTable? – MartW

+0

@CodeByMoonlight ... да :-) Исправлено. –

2

Для этого вам нужно вернуться к динамическому SQL.

1

Согласовано с другими, для этого вам понадобится динамический SQL; вы не можете определять имена объектов во время выполнения в собственном SQL. Для полного обсуждения динамического SQL см. http://www.sommarskog.se/dynamic_sql.html

Смежные вопросы