0

需要帮助在这个简单的任务。 这个sp应该提供一个结果集,并且会在MS-Access-Database报告中调用。准备stmt行thorws错误

表名是vvarying,但它以数字(lsid)结尾。使用Concatenatoin。 max_prepared_statement_count默认值16382

任何好主意?

THX 托马斯

CREATE DEFINER=`root2`@`%` PROCEDURE `sp_Quickview02`(IN lsid int) 
BEGIN 
set @tbl = concat('shape_tokens_',lsid); -- tablename 

set @sql= 'select base.Status, count(base.token) as Anzahl 
        from (select ?.completed, if(?.completed = ''N'',''offen'', ''abgeschlossen'') as Status, 
      ?.token from ?) base group by base.status;' 

PREPARE stmt FROM @sql; -- error is thrown here 
EXECUTE stmt using @tbl; 
DEALLOCATE PREPARE stmt; 
END 

回答

0

如果您检查您的变量值@sql然后它会为您提供以下输出中,不能执行,那么正确的。

SELECT base.Status, COUNT(base.token) AS Anzahl 
        FROM (SELECT ?.completed, IF(?.completed = 'N','offen', 'abgeschlossen') AS STATUS, 
      ?.token FROM ?) base GROUP BY base.status; 

变化按如下─

CREATE DEFINER=`root2`@`%` PROCEDURE `sp_Quickview02`(IN lsid int) 
BEGIN 
set @tbl = concat('shape_tokens_',lsid); -- tablename 

SET @sql= CONCAT('select base.Status, count(base.token) as Anzahl 
        from (select a.completed, if(a.completed = ''N'',''offen'', ''abgeschlossen'') as Status, 
      a.token from ',@tbl,' as a) base group by base.status;'); 

PREPARE stmt FROM @sql; -- error is thrown here 
EXECUTE stmt using @tbl; 
DEALLOCATE PREPARE stmt; 
END 
0

查询期待4参数所以使用执行查询,如下给出:

EXECUTE stmt using @tbl, @tbl, @tbl, @tbl;