将行从表移动到表

时间:2013-05-18 13:53:17

标签: c# mysql .net sql

我尝试将从一个表到期的行移动到另一个表:

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

知道它崩溃的原因吗?

2 个答案:

答案 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();";