将SQL Server查询转换为访问权限

时间:2014-01-16 20:19:51

标签: sql sql-server ms-access

我有以下SQL Server查询,不能因为上帝的爱而让它在MS Access中运行。

select 
   U.voorstellingnummer, U.uitvoeringnummer, U.zaalnaam, S.rijnummer, S.stoelnummer
from 
   Uitvoering as U 
inner join 
   Stoel as S on U.zaalnaam = S.zaalnaam
where 
   U.voorstellingnummer = 4 AND U.uitvoeringnummer = 1 
   AND
   -- (S.rijnummer, S.stoelnummer) not in (select(B.rijnummer, B.stoelnummer)
   ('rij '+ cast(S.rijnummer as varchar(3)) + ' stoel ' + cast(S.stoelnummer as varchar(3))) not in  
         (select('rij '+ cast(B.rijnummer as varchar(3)) + ' stoel ' + cast(B.stoelnummer as varchar(3)))
         from Bezetting as B
         where B.voorstellingnummer = 4 AND B.uitvoeringnummer = 1)

我已经将它添加了几天,但它在第一个AS上一直给我语法错误。

该查询在SQL Server中运行良好。我做错了什么?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

如果可以,我通常会像瘟疫那样避免访问。

但是,看起来您的问题可能出现在演员阵容中。如果我没记错,Access将执行从numeric到char的隐式转换。如果是这种情况,此查询应该有效:

select      U.voorstellingnummer, U.uitvoeringnummer, U.zaalnaam, S.rijnummer, S.stoelnummer
from        Uitvoering as U
inner join  Stoel as S
    on      U.zaalnaam = S.zaalnaam
where       U.voorstellingnummer = 4
    AND     U.uitvoeringnummer = 1
    AND     ('rij ' & S.rijnummer & ' stoel '  & S.stoelnummer) not in 
        (
        select      ('rij ' & B.rijnummer & ' stoel ' & B.stoelnummer)
        from        Bezetting as B
        where       B.voorstellingnummer = 4
            AND     B.uitvoeringnummer = 1
        )

如果隐式转换不起作用,Cstr()应该将数字转换为字符串。如果你只想要左边的3个字符,你可能需要做左边的事情(cstr(S.rijnummer),3)。

编辑:另外,我不完全确定你可以在are子句中使用子查询。如果没有,您可能需要将其中的大多数作为子查询,然后将Bezetting连接到它并使用isnull(Bezetting.rijnummer) - 或者Access中的任何内容: - )