首页 > 解决方案 > 创建表不存在错误“操作数应包含 1 个列”

问题描述

我检查了有关此错误的一些问题,其中大部分在使用“SELECT”函数时遇到此错误,但在我的情况下,我使用 CREATE TABLE IF NOT EXIST 但遇到此错误,您能否检查我的代码以查看导致错误的原因或是否你们知道做同样事情的其他方法。

我想创建一个按年支付的表格,实际上应该按月支付,但我现在正在尝试按年支付。

/* INSERT HERE THE LIST OF ALL EXISTING PAYMENT TABLES */
DROP TEMPORARY TABLE IF EXISTS T_distinctTable; 
CREATE TEMPORARY TABLE T_distinctTable (
ctr int PRIMARY KEY AUTO_INCREMENT NOT NULL, 
DisTable varchar (18)
);
INSERT INTO T_distinctTable (DisTable) 
SELECT TABLE_NAME from information_schema.tables WHERE TABLE_SCHEMA = 'cams' and TABLE_NAME like concat ('%','Payment_20','%');

SET @endYearTemp = (select count(*) from T_distinctTable); 

set @YearNow = (SELECT YEAR(CURDATE()));

set @TableName = concat('Payment_',@YearNow);

set @SQLTable = ('CREATE TABLE IF NOT EXISTS `', @TableName ,'` id int NOT NULL AUTO_INCREMENT, name CHAR(30),PRIMARY KEY (id)');
        SELECT @SQLTable;
        PREPARE stmt FROM @SQLTable;
        EXECUTE stmt;

标签: mysqlsql

解决方案


用于concat()连接字符串。将它们放在括号中并仅用逗号分隔它们是行不通的。而且您忘记了 . 的列定义周围的括号CREATE TABLE

...
set @SQLTable = concat('CREATE TABLE IF NOT EXISTS `', @TableName ,'` (id int NOT NULL AUTO_INCREMENT, name CHAR(30),PRIMARY KEY (id))');
        SELECT @SQLTable;
        PREPARE stmt FROM @SQLTable;
        EXECUTE stmt;
...

推荐阅读