Объявление параметра перед запросом sql - PullRequest
2 голосов
/ 06 апреля 2020

У меня есть простая таблица, и я хочу запросить ее.

s1

Следующий код работает хорошо:

SELECT category1, COUNT(ID) AS ci, category2
FROM mytable
WHERE (variable1 is NULL) AND (yeardata <= 2008)
GROUP BY category1, category2
ORDER BY COUNT(ID) DESC;

s2

Теперь я хочу изменить это на:

DECLARE @yeardata smallint=2008
SELECT category1, COUNT(ID) AS ci, category2
FROM mytable
WHERE (variable1 is NULL) AND (yeardata <= @yeardata)
GROUP BY category1, category2
ORDER BY COUNT(ID) DESC;

Однако, когда я пытаюсь запустить это, я получаю сообщение об ошибке, которое говорит что ожидается удаление, вставка, выбор, процедура или обновление?

Ответы [ 2 ]

3 голосов
/ 06 апреля 2020

Вы получаете это сообщение об ошибке, потому что это недопустимый Access SQL ...

DECLARE @yeardata smallint=2008

Вы можете объявить параметр в Access SQL следующим образом ...

PARAMETERS [@yeardata] Short;

... но это не позволяет вам присвоить значение параметру одновременно с его объявлением.

Если вы хотите загрузить результаты запроса в Recordset объект, Вы можете сделать это с помощью DAO.QueryDef, присвоить значение параметра и затем вызвать его метод OpenRecordset.

Однако, если вы хотите открыть запрос непосредственно в Datasheet View, вы можете указать значение параметра используя DoCmd.SetParameter , а затем вызовите DoCmd.OpenQuery, как в этом примере, из окна Immediate ...

DoCmd.SetParameter "@yeardata", 2008
DoCmd.OpenQuery "Query1"

Вот SQL для моей протестированной версии "Query1". ..

PARAMETERS [@yeardata] Short;
SELECT a.*
FROM all_tables AS a
WHERE (((a.notes) Is Null) AND ((Year([a].[date_created]))=[@yeardata]));
0 голосов
/ 06 апреля 2020

попробуйте что-то вроде:

DECLARE @yeardata smallint=2008;
BEGIN
SELECT 1
WHERE '2007' <= @yeardata;
END;

Вам нужно BEGIN и END после DECLARE .... и <code>;

...