MS Access VBA SQL查询调试选择案例

时间:2013-11-15 10:06:51

标签: sql ms-access access-vba ms-access-2013 select-case

在MS Access 2013 VBA中,我在此SQL字符串中收到语法错误:

strSQL = "INSERT INTO [man_year] ( man_year_val, year_int, main_research_area, organisation, man_year_source ) SELECT KU.[2007], '2007' AS Expr1, " _
& "select case right(left(KU.man_year_source;6);2) like 'Hu' 3 case right(left(KU.man_year_source;6);2) like 'Sa' 1 case right(left(KU.man_year_source;6);2) like 'Te' 2 case right(left(KU.man_year_source;6);2) like 'Su' 4 case right(left(KU.man_year_source;6);2) like 'Ud' 5 AS Expr2, " _
& "4 AS Expr3, " _
& "select switch" _
& "(left(KU.man_year_source;3) like '1. '; 1;" _
& "left(KU.man_year_source;3) like '1.1'; 4;" _
& "left(KU.man_year_source;3) like '1.2'; 5;" _
& "left(KU.man_year_source;3) like '1.3'; 6;" _
& "left(KU.man_year_source;3) like '1.4'; 7;" _
& "left(KU.man_year_source;3) like '1.5'; 8;" _
& "left(KU.man_year_source;3) like '1.6'; 9;" _
& "left(KU.man_year_source;3) like '2. '; 2;" _
& "left(KU.man_year_source;3) like '2.1'; 47;" _
& "left(KU.man_year_source;3) like '2.2'; 48;" _
& "left(KU.man_year_source;3) like '2.3'; 49;" _
& "left(KU.man_year_source;3) like '2.4'; 50;" _
& "left(KU.man_year_source;3) like '2.5'; 51;" _
& "left(KU.man_year_source;3) like '2.6'; 52;" _
& "left(KU.man_year_source;3) like '3. '; 3;" _
& "left(KU.man_year_source;3) like '3.1'; 53;" _
& "left(KU.man_year_source;3) like '3.2'; 54;" _
& "left(KU.man_year_source;3) like '3.3'; 55;" _
& "left(KU.man_year_source;3) like '3.4'; 56;" _
& "left(KU.man_year_source;3) like '3.5'; 57;" _
& "left(KU.man_year_source;3) like '3.6'; 58) from KU;"

我在CASE部分得到了错误,但这可能是因为它尚未到达SWITCH部分。 :-)任何人都可以请求帮助,我找不到错误。

最好的pmelch

1 个答案:

答案 0 :(得分:1)

我发现您的SQL语句至少有两个问题:

首先,Access SQL不支持CASE关键字。如果您考虑T-SQL(Microsoft SQL Server)中的CASE ... WHEN构造,则Access SQL中的等效项是Switch()函数(参考:here)。您可以将Switch()函数视为正在执行

Switch(when1, then1, when2, then2, ...)

其次,据我所知,Access SQL仅支持句点(.)作为小数符号,逗号(,)作为列表分隔符,即使您计算机上的区域设置指定其他值(例如,逗号(,)作为小数符号,分号(;)作为列表分隔符)。换句话说,我很确定

left(KU.man_year_source;3)

永远不会奏效;你需要使用

left(KU.man_year_source,3)

代替。