我尝试使用以下命令将过期的行从一个表移动到另一个表:
MySqlConnection connect = new MySqlConnection(connectionStringMySql);
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = connect;
cmd.Connection.Open();
string commandLine = @"INSERT INTO history SELECT clientid,userid,startdate,
enddate,first,city,imgurl,phone,type,seen
FROM events WHERE startdate<now();";
cmd.CommandText = commandLine;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
表是完全相同的(在每个表中,我都有带主键的id列,具有自动增量),当我运行它时,会出现以下异常:
Column count doesn't match value count at row 1
知道为什么会坠毁吗?
最佳答案
出现错误的原因是表中的列数与插入的值数不匹配。当您要插入的表上有一个自动递增列时,这种情况很常见。
为了解决这个问题,需要指定要插入值的列名。例子,
INSERT INTO history (col1, col2,....) // << specify column names here
SELECT clientid, userid, startdate, enddate, first,
city, imgurl, phone, type, seen
FROM events
WHERE startdate < now()
我不太确定table
history
的列名,所以需要将列名更改为表上的有效名称。例如,您在表历史记录中有一个自动递增列,并且希望保持查询的原样,您可以在
NULL
语句中传递SELECT
,以便将列总数与值总数相匹配。例子,INSERT INTO history
SELECT NULL, clientid, userid, startdate, enddate, first,
city, imgurl, phone, type, seen
FROM events
WHERE startdate < now()
请记住,在不指定列名的情况下,值的顺序确实很重要。