INSERT INTO缺少语法?

时间:2017-02-10 13:32:05

标签: sql ms-access

我遇到了INSERT INTO的奇怪问题。尝试运行以下查询:

INSERT INTO Claims_temp (CLAIM_NO)
SELECT CLAIM_NO AS CLAIM_FACT
FROM CLAIMS
WHERE CLAIM_NO LIKE "*-*"
UNION 
SELECT "L" & CLAIM_NO AS CLAIM_FACT
FROM CLAIMS
WHERE CLAIM_NO NOT LIKE "*-*";

我收到此错误:'查询表达式中的语法错误(缺少运算符)' CLAIM_NO LIKE" - " UNION SELECT" L" &安培; CLAIM_NO索赔来自于索赔的索赔,而不是" - "'。

如果我删除INSERT INTO Claims_temp行,则查询运行并生成正确的结果。我看不到任何语法错误。我也尝试过指定表,即不使用CLAIM_NO,而是在select查询部分使用CLAIMS.CLAIM_NO。

2 个答案:

答案 0 :(得分:2)

这似乎是一种奇怪的方法。为什么不这样做:

INSERT INTO Claims_temp (CLAIM_NO)
    SELECT IIF(CLAIM_NO LIKE "*-*", CLAIM_NO, "L" & CLAIM_NO) AS CLAIM_FACT
    FROM CLAIMS;

如果可能存在重复项(UNION删除了),请使用SELECT DISTINCT

答案 1 :(得分:1)

我认为戈登的答案是正确的,但我想补充说明原因。

该错误表明SQL解析器无法理解该语句,但问题似乎只有在添加插入行时才存在。

这表明解析器将INSERT ... SELECT视为与SELECT不同的语法,因此UNION在正常管道中可能不受支持。

如果这对您不起作用,我会尝试内联视图。类似的东西:

INSERT INTO Claims_temp (CLAIM_NO)
SELECT claim_fact FROM (
SELECT CLAIM_NO AS CLAIM_FACT
FROM CLAIMS
WHERE CLAIM_NO LIKE "*-*"
UNION 
SELECT "L" & CLAIM_NO AS CLAIM_FACT
FROM CLAIMS
WHERE CLAIM_NO NOT LIKE "*-*") AS foo;