MS Access 2010声明变量

时间:2015-04-15 22:40:19

标签: ms-access-2010

我尝试创建一个在访问中使用变量的查询,我使用以下SQL:

PARAMETERS @arrival_date date, @departure_date date, @hotel_id int;
SELECT
    *
FROM
    dbo.room r
WHERE
    (r.hotel_id = @hotel_id)
AND
    room_id NOT IN (
    SELECT
        r.room_id
    FROM
        room r
    LEFT JOIN
        booking b
    ON
        r.hotel_id = b.hotel_id
    AND
        r.room_id = b.room_id
    WHERE
        r.hotel_id = @hotel_id
    AND
        ((arrival_date <= @departure_date)
    AND
        (departure_date >= @arrival_date))
);

这个查询对于存储过程(以及在那里声明变量的正确方法)完全正常,但是当我尝试使用查询生成相同的内容时,我会得到以下错误:

  

ADO错误:参数&#39;附近的语法不正确。必须声明标量变量&#34;

     

HOTEL_ID&#34 ;.       
  必须声明标量变量&#34;

     

HOTEL_ID&#34;

我尝试过使用DECLARE语法,但这似乎也不起作用。有关其他信息(不确定这可能会产生什么效果,但我认为无论如何我都提到它)我在虚拟机(在Mac上)上使用Microsoft Access 2010。我的数据库本身是在SQL Server中创建的,并已导入MS Access。我现在不再能访问SQL服务器了,所以我需要在MS Access中完成任何工作

1 个答案:

答案 0 :(得分:1)

&#39; @&#39;是Access SQL标识符的无效字符。

修复?简单!使用[]:

引用参数名称
PARAMETERS [@arrival_date] date, [@departure_date] date, [@hotel_id] int;
SELECT
    *
FROM
    dbo.room r
WHERE
    (r.hotel_id = [@hotel_id])
AND
    room_id NOT IN (
    SELECT
        r.room_id
    FROM
        room r
    LEFT JOIN
        booking b
    ON
        r.hotel_id = b.hotel_id
    AND
        r.room_id = b.room_id
    WHERE
        r.hotel_id = [@hotel_id]
    AND
        ((arrival_date <= [@departure_date])
    AND
        (departure_date >= [@arrival_date]))
);

BTW,我更喜欢使用@在Access中为参数名称添加前缀,因为它符合SQL Server参数命名约定。