我有一个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)
这将如何工作,以便将其插入到新表中并且不会引发此错误?
答案 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
。