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