2013-02-12 75 views
0
DECLARE FoundCount INT; 
    DECLARE db_Name VARCHAR(255); 

SET @Project_List_val = CONCAT(Project_Number_val, '_List'); 
SET @db_Name='test_rs'; 

    SET @sql1 = CONCAT('SELECT COUNT(1) INTO', @FoundCount ,' 
    FROM information_schema.tables 
    WHERE table_schema =',@db_Name,' 
    AND table_name =', @Project_List_val); 

PREPARE stmt FROM @sql1; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

    IF FoundCount = 1 THEN 
SET @sql = CONCAT(' INSERT INTO test (Panel_Id) 
        SELECT Panel_Id 
        FROM ', @Project_List_val); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
END IF; 

这个存储过程执行得很好。但是当试图运行它时,它显示的是错误。mysql表存在存储过程逻辑

1064 - 您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行的'NULL'附近使用正确的语法。

如果指定的表(@Project_List_val)存在,我需要运行第二个查询。这样@ FoundCount = 1这样

回答

0

检查条件尝试此

- DECLARE FoundCount INT;

DECLARE db_Name VARCHAR(255); 

SET @Project_List_val = CONCAT(Project_Number_val, '_List'); 
SET @db_Name='test_rs'; 

    SET @sql1 = CONCAT('SELECT COUNT(1) INTO ', @FoundCount ,' 
    FROM information_schema.tables 
    WHERE table_schema = ',@db_Name,' 
    AND table_name =', @Project_List_val); 

PREPARE stmt FROM @sql1; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

    IF @FoundCount = 1 THEN 
SET @sql = CONCAT(' INSERT INTO test (Panel_Id) 
        SELECT Panel_Id 
        FROM ', @Project_List_val); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
END IF; 

使用这样的:

SET @sql1 = CONCAT('SELECT COUNT(1) INTO ', @FoundCount ,' 
    FROM information_schema.tables 
    WHERE table_schema = ',@db_Name,' 
    AND table_name =', @Project_List_val); 

我有给空间后进入这个.copy和解决的是电话我

+0

没有区别。同样的错误? – user1597811 2013-02-12 10:35:27

+0

还有更多建议吗? – user1597811 2013-02-12 10:39:05

+0

同样的错误。我使用了上述修改后的代码 – user1597811 2013-02-12 10:47:14

0

。对于@db_Name和@Project_List_Val语句中的那些变量缺少单引号