0

別のテーブルに挿入するために、2 つのテーブルから取得した 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 に答える