尝试插入新表,但看到“找不到输出表”

时间:2019-10-22 19:03:58

标签: sql sql-server database ms-access

我有一个SQL Server后端和一个Access前端。 SQL表每天更新一次,但是每周更新一次(或每当我运行此查询时),我需要将所有更改导出到一个新表中(上传),该表中的数据与我的静态表不匹配。所以基本上我想从静态表(dedupe)中删除活动表(MSTR-SENT)。

当我运行此查询(针对Access中的墨迹表的数据定义)时,出现错误“找不到输出表'upload'”。哪个是正确的,因为它不存在,我只想创建一个具有重复数据删除内容(上传)的新表。

INSERT INTO [upload]
  (company, [new-ind], [address], [state], city, zip, stext)
SELECT de.company,
       de.[new-ind],
       de.[address],
       de.[state],
       de.[city],
       de.[zip],
       de.stext
  FROM [MSTR-SENT] de
 WHERE NOT EXISTS(SELECT website, company, zip
                    FROM dedupe d2
                   WHERE d2.website = de.website OR d2.company = de.company OR d2.zip = de.zip)

这将如何工作,以便将其插入到新表中并且不会引发此错误?

1 个答案:

答案 0 :(得分:1)

INSERT INTO ...语句必须引用存在的表。如果要创建表,请使用INSERT...SELECT...INTO...语句:

SELECT de.company,
       de.[new-ind],
       de.[address],
       de.[state],
       de.[city],
       de.[zip],
       de.stext
  INTO dbo.upload
  FROM [MSTR-SENT] de
 WHERE NOT EXISTS(SELECT website, company, zip
                    FROM dedupe d2
                   WHERE d2.website = de.website OR d2.company = de.company OR d2.zip = de.zip)

当然,正如您应该所期望的,如果表upload存在,则上述操作将失败。但是,如果是这样,并且该表将有效地处于“ limbo”状态(有时在那里,有时则没有),那么看来您有一个更基本的设计缺陷,并且您展示了停止删除表,并使用存在的{ {1}}。

如果很简单,那么您希望表首先为“空”,然后INSERT INTO首先使表TRUNCATE