我从两个表中获得5个字段以插入到另一个表中。使用临时表或使用修复表来执行它是否更有效,并在每次使用时截断它?
如果临时更有效,如何在c#中创建一个临时表。因为这个sql不工作?
public static void CreateTempProd()
{
int result;
string sqlstr = "CREATE TEMPORARY TABLE ##tmptbl (id int NOT NULL AUTO_INCREMENT, dt DATETIME NOT NULL, qty int11 NOT NULL, rest int11 NOT NULL, nom VARCHAR(30) NOT NULL NOT NULL PRIMARY KEY id, ENGINE=MEMORY DEFAULT CHARSET=UTF8)";
MySqlConnection conn = new MySqlConnection(PublicVariables.cs);
MySqlCommand cmd = new MySqlCommand(sqlstr,conn);
MySqlTransaction trans;
conn.Open();
trans = conn.BeginTransaction();
try
{
result = cmd.ExecuteNonQuery();
}
catch (MySqlException e)
{
trans.Rollback();
MessageBox.Show(e.ToString());
return;
}
trans.Commit();
}
答案 0 :(得分:1)
你的SQL语法有点不对劲;
CREATE TEMPORARY TABLE ##tmptbl ( -- ## needs quoting
id int NOT NULL AUTO_INCREMENT,
dt DATETIME NOT NULL,
qty int11 NOT NULL, -- int11 should be int(11)
rest int11 NOT NULL, -- int11 should be int(11)
nom VARCHAR(30) NOT NULL NOT NULL -- double NOT NULL
PRIMARY KEY id, -- id needs braces
ENGINE=MEMORY DEFAULT CHARSET=UTF8 -- should go outside the table braces
)
也就是说,它应该是......
CREATE TEMPORARY TABLE `##tmptbl` (
id int NOT NULL AUTO_INCREMENT,
dt DATETIME NOT NULL,
qty int(11) NOT NULL,
rest int(11) NOT NULL,
nom VARCHAR(30) NOT NULL,
PRIMARY KEY (id)
)
ENGINE=MEMORY DEFAULT CHARSET=UTF8
一个好主意是尝试在mysql命令提示符下运行您的确切查询,这会捕获此错误并允许您修复它。