Member 13677823 Ответов: 1

Эта функция выдает ошибку в @tablename после применения from в запросе select.


Я пробовал приведенный ниже код в SQL, но снова и снова возникали проблемы при применении или передаче двух параметров.

Что я уже пробовал:

Создать функцию AutoID
(
@TableName as varchar(20),
@ColName as varchar(20)
)
Возвращает int
АС
НАЧАТЬ
Возврат (выберите макс.(@ColName)+1 из @TableName)
КОНЕЦ

1 Ответов

Рейтинг:
7

OriginalGriff

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

Вы можете сделать это - преобразовать полученный SELECT в строку NVARCHAR и использовать EXEC для ее запуска - но это очень плохая идея, так как она широко открыта для SQL-инъекции, поэтому если вы не будете очень-очень жестко контролировать входные значения, которые передаются функции (например, как минимум проверяя, что каждое значение является одним именем таблицы / столбца и не содержит никакой другой информации как часть этой SQL-функции), то в какой-то момент Вы потеряете свою БД либо из-за кражи, либо из-за злонамеренных манипуляций командами.

Я бы настоятельно посоветовал вам вообще этого не делать.


Member 13677823

Спасибо за ваше ценное предложение.

OriginalGriff

Всегда пожалуйста!