【问题标题】:Filling up an ms-access table with sql用 sql 填充 ms-access 表
【发布时间】:2019-11-24 01:46:18
【问题描述】:

我对数据库非常陌生,目前正在使用 Microsoft Access 2013。情况是我有大量数据,我想使用 SQL 语句将这些数据填充到已创建的表(Inventory)中在查询中。

我有以下内容:

INSERT INTO Inventory (Col 1, Col 2, Col 3, Col 4)

VALUES ("Val 1", "Val 2", "Val 3", "Val 4"), 
("Val 5", "Val 6", "Val 7", "Val 8"),
....
("Val 9", "Val 10", "Val 11", "Val 12");

而我想要的只是这张桌子:

Col 1  |  Col 2  |  Col 3  |  Col 4
       |         |         |
Val 1  |  Val 2  |  Val 3  |  Val 4
Val 5  |  Val 6  |  Val 7  |  Val 8
Val 9  |  Val 10 |  Val 11 |  Val 12

问题是,我不断收到错误缺少 sql 语句末尾的分号。因此我想我应该在每一行之后添加一个分号。如果我这样做,我会收到访问分号后找到的字符的错误。

实现我的多行 INSERT INTO-Statement 的正确语法是什么?

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    我认为 MS Access 只允许您使用 INSERT . . . VALUES 一次插入一条记录:

    INSERT INTO Inventory (Col 1, Col 2, Col 3, Col 4)
        VALUES ("Val 1", "Val 2", "Val 3", "Val 4");
    
    INSERT INTO Inventory (Col 1, Col 2, Col 3, Col 4)
        VALUES ("Val 5", "Val 6", "Val 7", "Val 8");
    
    ....
    
    INSERT INTO Inventory (Col 1, Col 2, Col 3, Col 4)
        VALUES ("Val 9", "Val 10", "Val 11", "Val 12");
    

    【讨论】:

    • 确实如此。而且您不能将多个语句放入查询中。解决方法可能是从 Excel 导入。 (我的解决方法是开始使用 PostgreSQL 而不是 Access,但有时我仍然使用 Access & Excel 通过链接表导入数据。
    • 对了一半。 INSERT INTO ... VALUES 限制为 1 条记录,INSERT INTO ... SELECT 则没有。我强烈建议不要使用 Excel 来保存表格,因为它不提供类型安全性,并且已知会在打开时破坏包含数字或日期的字符串。
    【解决方案2】:

    您可以使用INSERT INTO ... SELECT 和联合查询进行批量插入:

    INSERT INTO Inventory (Col 1, Col 2, Col 3, Col 4)
    SELECT "Val 1", "Val 2", "Val 3", "Val 4"
    FROM (SELECT First(ID) FROM MSysObjects) dummy
    UNION ALL
    SELECT "Val 5", "Val 6", "Val 7", "Val 8"
    FROM (SELECT First(ID) FROM MSysObjects) dummy
    UNION ALL
    SELECT "Val 9", "Val 10", "Val 11", "Val 12"
    FROM (SELECT First(ID) FROM MSysObjects) dummy
    

    但是,开销可能不会使这种构造变得有价值,而且 Access 确实对大约 65K 个字符的单个查询有最大长度。

    要序列化和反序列化表,我推荐using ADO and persistence。这样可以正确存储字段属性,序列化为不同的文件格式或数据库格式会导致信息丢失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多