0

我从两个表中获得了 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();
    }
4

1 回答 1

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 命令提示符下运行您的确切查询,这将捕获此错误并允许您修复它。

于 2013-11-10T09:47:19.987 回答