Mysql - 存储过程未运行

时间:2017-10-12 17:35:38

标签: mysql dynamic prepared-statement

我需要计算数据库中表的确切行数(不使用INFORMATION_SCHEMA中的TABLE_ROWS) 我正在尝试从this post

执行脚本
SET @tableSchema = 'Db_Warehouse';
SET SESSION group_concat_max_len = 10000000;
SET @rowCounts = (
  SELECT GROUP_CONCAT(CONCAT('SELECT ''',TABLE_NAME,''', COUNT(*) FROM ', TABLE_NAME) SEPARATOR ' union all ')
  FROM information_schema.tables WHERE table_schema = @tableSchema
);
PREPARE statement FROM @rowCounts;
EXECUTE statement;

但我一直收到错误代码1064:

<e>Query: PREPARE statement FROM @rowCounts

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table union all SELECT 'COX_ClientSatisfaction', COUNT(*) FROM COX_ClientSatisfa' at line 1

希望你能提出建议。

1 个答案:

答案 0 :(得分:0)

上述评论摘要:使用现有工具mysqldbcompare可以更好地完成检查克隆数据库中表行数是否相同的任务。

过程中出错的原因是MySQL reserved word table上的语法错误。

在设计自动查询生成器时,如果您使用Schema Object Names下的手册中所述的分隔标识符,则效果最佳。

例如,这是编写查询的更安全的方法:

SELECT GROUP_CONCAT(
  CONCAT(
    'SELECT ', QUOTE(TABLE_NAME), ', COUNT(*) FROM `', TABLE_NAME, '`')
  SEPARATOR ' UNION ALL ')
FROM information_schema.tables WHERE table_schema = @tableSchema