Есть ли способ передать переменную при создании таблицы в базе данных? - PullRequest
0 голосов
/ 11 марта 2011

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

create procedure maketable
@name varchar(50),
@roll int
as 
begin
create table new  (@name, @roll)
end

ошибка следующая

Msg 102, Level 15, State 1, Procedure maketable, Line 7
Incorrect syntax near '@name'.

Ответы [ 2 ]

0 голосов
/ 11 марта 2011

Вот начало - это создает таблицу с одним полем, чтобы вы могли завершить ее:

DROP PROCEDURE IF EXISTS maketable;

delimiter //

CREATE PROCEDURE maketable (IN table_name varchar(50), IN field1Name varchar(50), IN field1Type varchar(50))
BEGIN
   SET @s = CONCAT('CREATE TABLE ', table_name, '(', field1Name, ' ', field1Type, ')');
   PREPARE stmt1 FROM @s;
   EXECUTE stmt1;
END//
delimiter ;

CALL maketable('tst', 'id', 'INT');
0 голосов
/ 11 марта 2011

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

Потому чтоВы знаете всю информацию о столбцах в своем коде вызова. Существует ли какая-то конкретная причина, по которой вы не можете просто ввести CREATE TABLE непосредственно из своего кода?Это был бы самый простой способ сделать это.(Имейте в виду, возникновение невременных таблиц по требованию, вероятно, плохая, плохая идея ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...