используйте переменную для имени таблицы в mysql sproc

Я пытаюсь передать имя таблицы в свою mysql хранимую процедуру для использования этого sproc для выбора прочь различных таблиц, но это не работает...

это что я "m попытка:

CREATE PROCEDURE `usp_SelectFromTables`(
 IN TableName varchar(100)
)
BEGIN
        SELECT * FROM @TableName;
END

Я также попробовал его w/o знак, и это просто говорит мне, что TableName не существует..., который я знаю :)

29
задан skaffman 2 May 2010 в 18:12
поделиться

1 ответ

Это зависит от СУБД, но нотация обычно требует динамического SQL и сталкивается с проблемой, что возвращаемые значения функции зависят от входных данных при ее выполнении. Это приводит систему в замешательство. Как общее правило (и поэтому, вероятно, могут быть исключения), СУБД не позволяют использовать заполнители (параметры) для структурных элементов запроса, таких как имена таблиц или столбцов; они позволяют указывать только значения, такие как значения столбцов.

Некоторые СУБД поддерживают хранимые процедуры, которые позволяют создать строку SQL и затем работать с ней, используя "подготовить", "выполнить немедленно" или аналогичные операции. Обратите внимание, однако, что вы внезапно становитесь уязвимы для атак SQL-инъекций - кто-то, кто может выполнить вашу процедуру, может частично контролировать, какой SQL будет выполняться.

13
ответ дан 28 November 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: