我遇到了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。
答案 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;