Delphi TAdoQuery是否可以一次性执行多个插入操作,还是必须分别执行每个语句?我想做的是这样的:

AdoQuery.SQL.Clear;
AdoQuery.SQL.Add('INSERT INTO user VALUES (1, "User 1");');
AdoQuery.SQL.Add('INSERT INTO user VALUES (2, "User 2");');
AdoQuery.SQL.Add('INSERT INTO user VALUES (3, "User 3");');
AdoQuery.ExecSQL;
AdoQuery.Close;


这可能吗?执行此操作时,我从MySQL得到错误。我还尝试添加BEGIN;和END;围绕查询,但这也不起作用。

编辑:我想这样做,因为当我在for循环中执行插入时,似乎> 10个查询要花很长时间。我假设像上面一样添加它们会加快速度。有谁知道在插入之间是否需要AdoQuery.Close调用?

最佳答案

在MySQL中,您可以使用以下语法:

INSERT INTO user VALUES (1, "User 1"), (2, "User 2"), (3, "User 3")


然后,您可以使用参数:

AdoQuery.SQL.Text := 'INSERT INTO user VALUES (:p11, :p12), (:p21, :p22), (:p31, :p32)';
AdoQuery.Parameters[0].Value := 1;
AdoQuery.Parameters[1].Value := 'User 1';
AdoQuery.Parameters[2].Value := 2;
AdoQuery.Parameters[3].Value := 'User 2';
AdoQuery.Parameters[4].Value := 3;
AdoQuery.Parameters[5].Value := 'User 3';
AdoQuery.ExecSQL;

10-05 22:24