我尝试将从一个表到期的行移动到另一个表:
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
知道它崩溃的原因吗?
答案 0 :(得分: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()
我不太确定表history
的列名称,这就是您需要将列名更改为表上有效名称的原因。
例如,您在表历史记录中有一个自动递增列,并且您希望保持查询不变,您可以在NULL
语句上传递SELECT
以匹配总列数到值的总数。例如,
INSERT INTO history
SELECT NULL, clientid, userid, startdate, enddate, first,
city, imgurl, phone, type, seen
FROM events
WHERE startdate < now()
请记住,如果您不指定列名,则值的顺序很重要。
答案 1 :(得分:0)
尝试:
string commandLine = @"INSERT INTO history (clientid,userid,startdate,enddate,first,city,imgurl,phone,type,seen) SELECT clientid,userid,startdate,enddate,first,city,imgurl,phone,type,seen FROM events WHERE startdate<now();";