我从两个表中获取了 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();
}
最佳答案
你的 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 命令提示符下运行确切的查询,这样会捕获此错误并允许您修复它。
关于c# - 临时表还是截断修复表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19888212/