У меня есть сайт, управляемый данными, с множеством хранимых процедур. То, что я хочу, чтобы в конечном счете быть в состоянии сделать это, чтобы сказать что-то вроде:SQL Server хранимые процедуры - обновить столбец на основе имени переменной ..?
For Each @variable in sproc inputs
UPDATE @TableName SET @variable.toString = @variable
Next
Я хотел бы, чтобы быть в состоянии принять любое количество аргументов.
Он будет в основном проходить через все входы и обновлять столбец с именем переменной со значением переменной - например, столбец «Имя» будет обновляться со значением @Name. Я хотел бы иметь в основном одну хранимую процедуру для обновления и одну для создания. Однако для этого мне нужно будет иметь возможность преобразовать фактическое имя переменной, а не значение, в строку.
Вопрос 1: Возможно ли это сделать в T-SQL, и если да, то как?
Вопрос 2: Есть ли какие-либо существенные недостатки в использовании чего-либо подобного (например, производительности или использования ЦП)?
Я знаю, что если значение недействительно, оно предотвратит обновление только этой переменной и любых последующих, но все данные будут проверены в коде vb.net в любом случае, поэтому всегда будет действовать при отправке в базу данных , и я гарантирую, что могут быть представлены только переменные, в которых находится столбец.
Большое спасибо заранее,
С уважением,
Ричард Кларк
Edit:
Я знаю об использовании строк SQL и риск атак SQL-инъекции - Я изучил это немного в моей диссертации несколько недель назад.
В основном сайт использует объектно-ориентированную архитектуру. Существует много классов - например, Product - которые имеют много атрибутов (я создал свой собственный класс под названием Attribute, который имеет такие свойства, как DataField, Name и Value, где DataField используется для получения или обновления данных, Name отображается в администрации frontend при создании или обновлении Продукта и значения, которое может отображаться на интерфейсе клиента, задается администратором. DataField - это поле, которое я буду использовать в «UPDATE Blah SET @Field = @Value».
Я знаю, что это, вероятно, запутывает, но его очень сложно объяснить - у меня действительно хорошее понимание всей системы в моей голове, но я не могу легко выразить это словами.
В основном структура настроена так, что никакой пользователь сможет изменить значение DataField o r Имя, но они могут изменить значение. Я думаю, что если бы я использовал динамические параметризованные строки SQL, то не было бы риска для SQL-инъекций.
Я имею в виду в основном цикл через все атрибуты, так что в конце концов, как:
UPDATE Products SET [Name] = '@Name', Description = '@Description', Display = @Display
Затем цикл через все снова атрибуты и добавить значения параметров - это будет иметь тот же эффект, используя хранимые процедуры, правильно??
Я не возражаю, добавляя к времени загрузки страницы, так как это в основном повлияет на интерфейс администратора и окажет маргинальное влияние на внешний интерфейс клиента.
Dare Я спрашиваю, почему вы хотите это сделать? –
Я хочу сделать это, чтобы иметь возможность добавлять атрибуты, скажем, продукта из интерфейса администратора. У меня в основном есть массив, например Product, в классе «Менеджер», называемом ProductManager. ProductManager наследует от Менеджера, который перебирает все строки в таблице Products и создает экземпляр Product для каждого с правильными деталями при его создании. Я хотел бы расширить это, чтобы администратор мог добавлять атрибут, который затем может использовать на интерфейсе клиента. К сожалению, это в настоящее время означает изменение sprocs каждый раз. – ClarkeyBoy