使用VBA Access一次插入多个记录

时间:2012-08-17 20:09:28

标签: sql vba ms-access-2007

我试图避免使用多个INSERT SQL查询,但如果我必须,我会。我已阅读there您可以简单地使用INSERT INTO table(field) SELECT 'value' UNION ALL SELECT ...,但我在MS Access 2007下遇到了它的语法问题。我尝试了一些变体但没有效果:我总是得到“不正确语法“或”缺少运算符“错误。我已尝试使用ALL限定符,使用和不使用SELECT关键字等。以下是我使用VBA创建查询的方法:

sql_query = "INSERT INTO " & tmp_tbl_name & " (transit)"
For Each xlCell In xlRange
    sql_query = sql_query & " SELECT '" & xlCell.Value & "' "
    sql_query = sql_query & "UNION"
Next xlCell
sql_query = Mid(sql_query, 1, Len(sql_query) - 6)
DoCmd.RunSQL (sql_query)

以下是我正在生成的查询的简短示例:

INSERT INTO tmp_tbl_2012_08_17_15_44_03 (transit) 
SELECT 'L02_NA010001' 
  UNION 
SELECT 'L13_PB010001' 
  UNION 
SELECT 'L31_US020001' 
  UNION 
SELECT 'L33_EX020010'
  ...

该表只有一个VARCHAR(255)字段,与任何其他表没有任何关系(它是一个临时表来处理一些事情,只保留一些元素)。

非常感谢!

2 个答案:

答案 0 :(得分:3)

我认为你可以使用好的'DAO来快速完成这项工作:

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("tmp_tbl_2012_08_17_15_44_03", dbOpenDynaset)

For Each xlCell In xlRange
    With rs
        .AddNew
        .Fields("transit") = xlCell.Value
        .Update
    End With
Next xlCell

rs.Close
db.Close

答案 1 :(得分:1)

在MS Access中一次运行一个语句可能会更容易,UNION将为每个UNION语句要求FROM Table,这意味着FROM表必须只包含一行或一些花哨的步法。

INSERT INTO tmp_tbl_2012_08_17_15_44_03 (transit) 
SELECT Transit FROM (
SELECT DISTINCT 'L02_NA010001' As Transit FROM tablename
  UNION 
SELECT DISTINCT 'L13_PB010001' As Transit FROM tablename
  UNION  ... )