【问题标题】:SQL Insert only the rows that have data in a specific columnSQL 仅插入在特定列中有数据的行
【发布时间】:2019-12-01 00:26:38
【问题描述】:

我在这方面基本上是个菜鸟,并且与 Google 搜索相差甚远。访问 VBA 和 SQL 库存数据库。

我有一张由条形码扫描仪填充的表格,如下所示;

PartNo | SerialNo | Qty | Vehicle
-------+----------+-----+---------
test   |          | 1   | H2
test2  |          | 1   | H2
test3  | test3s/n | 1   | H2
test3  | test4s/n | 1   | H2
test   |          | 1   | H2

我正在尝试从中更新 2 个表,或者如果 PartNo 不存在则插入。

  • tblPerm2PartNo 作为主键
  • tblPerm1PartNoSerialNoQtyVehicle
  • PartNo 必须存在于 tblPerm2 中才能添加到 tblPerm1

我可以将PartNo 插入tblPerm2 没问题,但我遇到了tblPerm1 的问题。

我在这里关注用户 Parfait 的示例,Update Existing Access Records from CSV Import , native to MS Access or in VB.NET

我尝试了插入和插入,并带有连接。下面的代码将所有内容添加到tblPerm1,包括没有SerialNo 的行。如何仅插入 tblTemp 中具有序列号的行?

INSERT INTO tblPerm1 (PartNo, SerialNo, Qty, Vehicle) 
    SELECT tblTemp.PartNo, tblTemp.SerialNo, tblTemp.Qty, tblTemp.Vehicle 
    FROM tblTemp 
    WHERE tblTemp.SerialNo IS NOT NULL;

我希望这只会插入 2 个“test3”行,但会插入所有行。 SELECT DISTINCT 是一样的,但是'test'只有一个条目

完成后,我将从tblTemp 中删除并继续更新和插入。也许有更好的方法?

提前致谢

【问题讨论】:

    标签: sql


    【解决方案1】:

    SerialNo 列实际上是空字符串而不是 NULL 吗?

    如果这可行,那么是的,它们是:

    INSERT INTO tblPerm1 (PartNo, SerialNo, Qty, Vehicle) 
        SELECT tblTemp.PartNo, tblTemp.SerialNo, tblTemp.Qty, tblTemp.Vehicle 
        FROM tblTemp 
        WHERE tblTemp.SerialNo <> '';
    

    请参阅How to check for Is not Null And Is not Empty string in SQL server? 了解更多关于检查空字符串(带或不带空格)的信息(尽管详细信息可能因您运行的 SQL 服务器而异)。

    【讨论】:

    • 就是这样,我想这就是我从电子表格中导入数据的方式。我正在使用 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, [tblTemp], strPath, True
    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    相关资源
    最近更新 更多