2011-03-11 2 views
0

필자의 프로그램을 통해 저에게 주어진 칼럼 이름과 테이블 이름으로 프로그램에서 테이블을 동적으로 생성하고 싶습니다. 그래서 내가 저장 프로 시저 내 변수를 전달하려고하는데 오류가 난이거기 데이터베이스에 테이블을 만드는 동안 변수를 전달하는 방법은 무엇입니까?

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'. 

답변

0
당신은 행운, MySQL stored procedures can not contain dynamic SQL 나간다

, 변수 구현을 다음과 같다 발생 어떻게 사용하려고하는지 사용할 수 없습니다.

호출 코드의 모든 열 정보를 알고 있기 때문에 코드에서 직접 CREATE TABLE을 발급 할 수없는 특별한 이유가 있습니까? 이 작업을 수행하는 가장 간단한 방법이 될 것입니다. (비 임시 테이블을 요구하는 것은 아마도 나쁜 생각 일 것입니다.)

0

여기가 시작입니다. 이렇게하면 하나의 필드가있는 테이블이 만들어 지므로 끝내야합니다.

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

이 코드에는 IN 근처에 오류가 표시되는 이유는 무엇입니까? –

+0

또한 'CONCAT'은 인식 할 수있는 내장 함수 이름이 아닙니다. –

+0

실행중인 MySQL 버전은 무엇입니까? 5.1에서 테스트했을 때 작동했습니다. –

관련 문제