2015-04-15 4 views
0

Я пытаюсь создать запрос, который использует переменный доступ, я использую следующий SQL:MS Access 2010 Объявления переменных

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 error: Incorrect syntax near 'Parameters'. Must declare the scalar variable "

hotel_id".
Must declare the scalar variable "

hotel_id".

Я попытался использовать синтаксис DECLARE, но это не похоже на работу либо , За дополнительной информацией (не уверен, как это может повлиять, но я думал, что я упоминал об этом в любом случае), я использую Microsoft Access 2010 поверх виртуальной машины (на Mac). Сама моя база данных была создана в SQL Server и импортирована в MS Access. Теперь у меня больше нет доступа к SQL-серверу, поэтому все, что я делаю, должно выполняться в MS Access

ответ

1

'@' является недопустимым символом для идентификатора доступа SQL.

Исправить? Легко! Quote имена параметров с []:

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])) 
); 

Кстати, я предпочитаю использовать @ в качестве префикса имен параметров в Access, поскольку он соответствует соглашениям об именах параметров SQL Server.

Смежные вопросы