在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部分。:-)谁能帮忙,我找不到错误。
最好的产品
我发现您的SQL语句至少有两个问题:
首先,Access SQL不支持CASE关键字。如果您想到的是T-SQL(Microsoft SQL Server)中的CASE ... WHEN构造,那么Access SQL中的等效项就是该函数(参考:here)。您可以认为该功能在做Switch()Switch()
CASE
CASE ... WHEN
Switch()
Switch(when1, then1, when2, then2, ...)
其次,据我所知,即使您计算机上的“区域设置”指定了其他值(例如,逗号()作为.小数点符号和半角符号,Access SQL仅支持将句点()作为小数点符号和逗号(,)作为列表分隔符,) -冒号(;)作为列表分隔符)。换句话说,我相当确定
.
,
;
left(KU.man_year_source;3)
永远不会工作;您需要使用
left(KU.man_year_source,3)
反而。